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)
标签:KEYEVENTF,word,Python,KEYUP,插入,keybd,win32con,event,win32api 来源: https://blog.csdn.net/peng211217610/article/details/119303197