想从网上白嫖大佬的代码拿来用的,搞了半天这方面的帖子就找到一篇。请见:(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)