Python操作word插入对象

想从网上白嫖大佬的代码拿来用的,搞了半天这方面的帖子就找到一篇。请见:(1条消息) python在word文档里插入文件对象_u011420268的博客-CSDN博客

思路很不错,想顺着这个思路来操作,但是发现如下问题

1、要替换附件,首先得有附件,所以这种替换附件的操作不适用新创建word,而适用编辑已有word。

2、被替换附件和本次需要的附件数量还必须相同,否则会出现问题。因为附件的展示效果是以图片的形式存在的,如果数量不一致,会导致部分附件实际上只是个图片。所以这个方式比较适合每次附件数量和格式都相同,只需替换内容的场景。

于是我用了一种比较笨的办法,就是用键盘快捷键来操作插入对象。

from docx import Document
from docx.shared import Inches
import webbrowser
import win32api
import win32con

​
#定义Windows上传文件的类
class WinUpLoadFile:

    def winUpLoadFile(self,file_path,title):
        time.sleep(3)
        #一级顶层窗口,此处title为上传窗口名称,浏览器不一样上传窗口名称不一样
        dialog = win32gui.FindWindow("#32770",title)
        #二级窗口
        comboxex32 = win32gui.FindWindowEx(dialog, 0, "ComboBoxEx32", None)
        #三级窗口
        combox = win32gui.FindWindowEx(comboxex32, 0, "ComboBox", None)
        #四级窗口
        edit = win32gui.FindWindowEx(combox, 0, "Edit", None)
        button = win32gui.FindWindowEx(dialog, 0, "Button", None)
        #执行操作
        win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, file_path)
        #点击打开上传文件
        win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)

​

#制作一个word文档,根据自己情况,替换相关路径和文件名
doc = Document()
doc.add_heading('一级标题',level=1)
p = doc.add_paragraph('', style='List Bullet')
p.add_run('aaaaa')
doc.add_picture(r'E:\TDdownload\名不虚传.jpg', width=Inches(5.0))
p = doc.add_paragraph('', style='List Bullet')
doc.save(r'E:\TDdownload\aaa.docx')


#打开已经制作的word文档,用快捷键操作word
webbrowser.open(r'E:\TDdownload\aaa.docx')
time.sleep(4)


#ctrl+End移动到word末尾
win32api.keybd_event(17, 0, 0, 0)
win32api.keybd_event(35, 0, 0, 0)
win32api.keybd_event(35, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)
#输入回车
win32api.keybd_event(13, 0, 0, 0)
win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)
#crtl+N打开拆入对象窗口
win32api.keybd_event(18, 0, 0, 0)
win32api.keybd_event(78, 0, 0, 0)
win32api.keybd_event(78, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(18, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(74, 0, 0, 0)
win32api.keybd_event(74, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(74, 0, 0, 0)
win32api.keybd_event(74, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(18, 0, 0, 0)
win32api.keybd_event(70, 0, 0, 0)
win32api.keybd_event(70, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(18, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(18, 0, 0, 0)
win32api.keybd_event(66, 0, 0, 0)
win32api.keybd_event(66, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(18, 0, win32con.KEYEVENTF_KEYUP, 0)
#上传附件
WinUpLoadFile().winUpLoadFile(r'E:\TDdownload\Q-Dir_Installer_x64.zip','浏览')
win32api.keybd_event(18, 0, 0, 0)
win32api.keybd_event(65, 0, 0, 0)
win32api.keybd_event(65, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(18, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(13, 0, 0, 0)
win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)

上一篇:python 弹窗提示警告框MessageBox


下一篇:pywin32介绍到入门