ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python操作word插入对象

2021-08-01 21:05:59  阅读:339  来源: 互联网

标签:KEYEVENTF word Python KEYUP 插入 keybd win32con event win32api


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有