Python 使用 win32com 模块对 word 文件进行操作
what's the win32com 模块
win32com 模块主要为 Python 提供调用 windows 底层组件对 word 、Excel、PPT 等进行操作的功能,只能在 Windows 环境下使用,并且需要安装 office 相关软件才行(WPS也行)。
使用 win32com 模块主要是因为 Python 针对 word 文档操作的第三方库相对较少并且功能较弱,Python 有针对 .docx 后缀文件的第三方库如 python-docx、pydocx等等,但是没有针对 .doc 和 .wps 的第三方库,所以这里就只能使用 win32com 模块。 相对而言 Python 针对 Excel文档操作的第三方库就非常友好
传送门:python读、写、修改、追写excel文件(xlrd / xlwt / xlutils / openpyxl)
pip install pywin32
import win32com
# 最常用的模块其实是win32com.client
基本操作
模拟打开 office
word = win32com.client.Dispatch('Word.Application')
# 或者使用下面的方法,使用启动独立的进程:
# word = win32com.client.DispatchEx('Word.Application')
声明属性
word.Visible = 0 # 后台运行
word.DisplayAlerts = 0 # 不显示,不警告
# 如果不声明上述属性,运行的时候会显示的打开office软件操作文档
打开文件
doc = word.Documents.Open('xxx.doc) # 打开一个已有的word文档
# new_doc = word.Documents.Add() # 创建新的word文档
读取内容
data = doc.paragraphs[0].text
插入文字
# 在文档开头添加内容
myRange1 = doc.Range(0,0)
myRange1.InsertBefore('Hello word') # 在文档末尾添加内容
myRange2 = doc.Range()
myRange2.InsertAfter('Bye word') # 在文档i指定位置添加内容
myRange3= doc.Range(0, insertPos) # insertPos为数字
myRange3.InsertAfter('what's up, bro?')
针对关键词的操作
应用场景:搜索关键字,将目标关键字替换为指定文字,或者更改关键字颜色、背景色等等
- 文字替换
word.Selection.Find.ClearFormatting()
word.Selection.Find.Replacement.ClearFormatting()
word.Selection.Find.Execute(OldStr, False, False, False, False, False, True, 1, True, NewStr, 2)
'''
上面涉及的 11 个参数说明
(OldStr--搜索的关键字,
True--区分大小写,
True--完全匹配的单词,并非单词中的部分(全字匹配),
True--使用通配符,
True--同音,
True--查找单词的各种形式,
True--向文档尾部搜索,
1,
True--带格式的文本,
NewStr--替换文本,
2--替换个数(0表示不替换,1表示只替换匹配到的第一个,2表示全部替换)
''' - 更改文字颜色、背景色
self.xlApp.Selection.Find.ClearFormatting()
self.xlApp.Selection.Find.Replacement.ClearFormatting() # 循环操作,将每个匹配到的关键词进行换色
while self.xlApp.Selection.Find.Execute(str, False, False, False, False, False, True, 0, True, "", 0):
word.Selection.Range.HighlightColorIndex = 11 # 替换背景颜色为绿色
word.Selection.Font.Color= 255 # 替换文字颜色为红色'''
wdAuto 0 Automatic color. Default; usually black.
wdBlack 1 Black color.
wdBlue 2 Blue color.
wdBrightGreen 4 Bright green color.
wdByAuthor -1 Color defined by document author.
wdDarkBlue 9 Dark blue color.
wdDarkRed 13 Dark red color.
wdDarkYellow 14 Dark yellow color.
wdGray25 16 Shade 25 of gray color.
wdGray50 15 Shade 50 of gray color.
wdGreen 11 Green color.
wdNoHighlight 0 Removes highlighting that has been applied.
wdPink 5 Pink color.
wdRed 6 Red color.
wdTeal 10 Teal color.
wdTurquoise 3 Turquoise color.
wdViolet 12 Violet color.
wdWhite 8 White color.
wdYellow 7 Yellow color.
'''更多背景颜色的值
- 更多其他属性,请查阅 microsoft 网站提供的信息:https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.word?view=word-pia
页眉文字替换
word.ActiveDocument.Sections[0].Headers[0].Range.Find.ClearFormatting()
word.ActiveDocument.Sections[0].Headers[0].Range.Find.Replacement.ClearFormatting()
word.ActiveDocument.Sections[0].Headers[0].Range.Find.Execute(OldStr, False, False, False, False, False, True, 1, False, NewStr, 2)
打印
doc.PrintOut()
保存
doc.Save() # 保存
doc.SaveAs('asdasd.doc') # 另存为
退出
退出操作必须得做,不然进程就会一直占据着这个文件,下次操作相同文件的时候就会报错
doc.Close() # 关闭 word 文档
word.Documents.Close(wc.wdDoNotSaveChanges) # 保存并关闭 word 文档
word.Quit() # 关闭 office
注意事项
对文档的操作理论上支持多线程,但是会有大概率报错。建议开启多线程时全局声明一个 word 然后每一个线程声明一个 doc 进行操作,而不是每一个线程都声明一个 word 和 doc。并且,在每一个线程中,doc 声明之前+doc关闭之后,需要加入以下两行代码
import pythoncom pythoncom.CoInitialize() # 声明 doc 之前要加入的代码 doc = wordhandle.Documents.Open('xxx.doc'’)
# 各种骚操作
doc.Save()
doc.Close() pythoncom.CoUninitialize() # 关闭 doc 之后加入的代码
转码操作
win32com 模块支持对文档进行各种转码操作,如 doc 转 docx,docx 转 doc,wps 转 pdf,pdf 转 docx 等等
下面举个 docx 转 pdf 例子
from win32com import client as wc word = wc.Dispatch("Word.Application")
wordhandle.Visible = 0 # 后台运行,不显示
wordhandle.DisplayAlerts = 0 #不警告
doc = wordhandle.Documents.Open('xxx.docx')
doc.SaveAs('xxx.pdf', 17) # txt=4, html=10, docx=16, pdf=17
doc.Close()
word.Quit()
'''
wdFormatDocument = 0
wdFormatDocument97 = 0
wdFormatDocumentDefault = 16
wdFormatDOSText = 4
wdFormatDOSTextLineBreaks = 5
wdFormatEncodedText = 7
wdFormatFilteredHTML = 10
wdFormatFlatXML = 19
wdFormatFlatXMLMacroEnabled = 20
wdFormatFlatXMLTemplate = 21
wdFormatFlatXMLTemplateMacroEnabled = 22
wdFormatHTML = 8
wdFormatPDF = 17
wdFormatRTF = 6
wdFormatTemplate = 1
wdFormatTemplate97 = 1
wdFormatText = 2
wdFormatTextLineBreaks = 3
wdFormatUnicodeText = 7
wdFormatWebArchive = 9
wdFormatXML = 11
wdFormatXMLDocument = 12
wdFormatXMLDocumentMacroEnabled = 13
wdFormatXMLTemplate = 14
wdFormatXMLTemplateMacroEnabled = 15
'''
转码的码
Python 使用 win32com 模块对 word 文件进行操作的更多相关文章
- python使用xlrd模块读写Excel文件的方法
本文实例讲述了python使用xlrd模块读写Excel文件的方法.分享给大家供大家参考.具体如下: 一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi ...
- python中configparser模块读取ini文件
python中configparser模块读取ini文件 ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(se ...
- Python 中当前位置以及目录文件遍历操作
Python 中当前位置以及目录文件遍历操作 当前位置 print(os.path.dirname(__file__)) 其中 dirname 会选择目录(文件夹),"__file__&qu ...
- Python中xlrd、xlwt、win32com模块对xls文件的读写操作
# -*- coding: utf-8 -*- #xlrd和xlwt只支持xls文件读写,openpyxl只支持xlsx文件的读写操作 import xlrd import xlwt import w ...
- python 使用win32com实现对word文档批量替换页眉页脚
最近由于工作需要,需要将70个word文件的页眉页脚全部进行修改,在想到这个无聊/重复/没有任何技术含量的工作时,我的内心是相当奔溃的.就在我接近奔溃的时候我突然想到完全可以用python脚本来实现这 ...
- python基础:os模块中关于文件/目录常用的函数使用方法
Python是跨平台的语言,也即是说同样的源代码在不同的操作系统不需要修改就可以同样实现 因此Python的作者就倒腾了OS模块这么一个玩意儿出来,有了OS模块,我们不需要关心什么操作系统下使用什么模 ...
- 关于python包,模块,.pyc文件和文件导入理解
参考文献 一.包 包是一个文件夹,用来存放模块和子包. 包里一般会有一个__init__.py的文件(也可以没有). 包里会有一个__pycache__文件夹,存放.py文件经解释器解释后的中间字节码 ...
- 吴裕雄--天生自然python学习笔记:python 用pygame模块处理音频文件
除了对图片. Word 等普通格式的文件进行处理外, Python 还有强大的多媒体文件操作能力,如对音频.视频 文件的操作 . 如果要播放音乐,我们可以用 pygame 包中的 mixer 对 象. ...
- python 的基础学习 第九天 文件的操作
1,文件操作 参数:1,文件路径 2,编码方式,3,执行动作(打开方式),只读,只写,,读写,追加和读写. 1 打开文件,得到文件句柄并赋值给一个变量.2. 通过句柄对文件进行操作.3. 关闭文件 ...
随机推荐
- linux 使用ssh-keygen生成ssh公钥和私钥
linux一般为在自己的家目录下建立 .ssh 文件夹 中生成密钥 /home/username/.ssh 生成的命令如下: ssh-keygen -t rsa -C "yourname@y ...
- python-gitlab 之更改 merge_method
参考: https://docs.gitlab.com/ee/api/projects.html https://python-gitlab.readthedocs.io/en/stable/gl_o ...
- sed命令配置反向引用
比如反向引用的例子, 原日志如下: {"accessip_list":"::","method":"GET"," ...
- idea 端口被占用
打开你的DOS命令首先输入 netstat -ano|findstr 8088 (8088即为被占用的端口号) 再输入taskkill /pid 7348 /f (7348即为上 ...
- Nikto 扫描工具
一.渗透步骤 信息收集 (被动的信息收集,主动的信息收集) 扫描探测 制定攻击方向 渗透 留后门 课堂分享: 书籍: <使用kali Linux进行web渗透测试>--书中部分工具已经无法 ...
- python爬虫中遇到的问题以及解决方法
(1)运行后报错:“TypeError: cannot use a string pattern on a bytes-like” 原因:content用decode(‘utf-8’)进行解码,由by ...
- Spring Boot 集成 Kafka
相关文章 网址 Spring Boot系列文章(一):SpringBoot Kafka 整合使用 http://www.54tianzhisheng.cn/2018/01/05/SpringBoot- ...
- iOS GPU、cpu、显示器的协作
在 iOS 系统中,图像内容展示到屏幕的过程需要 CPU 和 GPU 共同参与. CPU 负责计算显示内容,比如视图的创建.布局计算.图片解码.文本绘制等. 随后 CPU 会将计算好的内容提交到 GP ...
- Linux安装pycharm并添加图标到桌面
安装: 1.到pycharm官网下载Linux版本的pycharm包. 2.打开中端 cd到下载的文件夹,默认为 ~/Downloads/ 文件夹下 3.执行命令 tar -xvzf pycharm- ...
- Eclipse中将java类打成jar包形式运行
记录一次帮助小伙伴将java类打成jar包运行 1.创建java project项目 file > new > project > java project 随便起一个项目名称,fi ...