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表示全部替换)
- '''
- word.Selection.Find.ClearFormatting()
- 更改文字颜色、背景色
- 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.
- '''
更多背景颜色的值
- self.xlApp.Selection.Find.ClearFormatting()
- 更多其他属性,请查阅 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. 关闭文件 ...
随机推荐
- 基于python3环境使用bandersnatch搭建本地pypi源
pip3 install bandersnatch # https://pypi.org/project/bandersnatch/#files 查询最新版本 wget https://files. ...
- 矩阵LU分解程序实现(Matlab)
n=4;%确定需要LU分解的矩阵维数 %A=zeros(n,n); L=eye(n,n);P=eye(n,n);U=zeros(n,n);%初始化矩阵 tempU=zeros(1,n);tempP=z ...
- Appium连接夜神模拟器,模拟手势点击(tap)
# -*- coding:utf-8 -*- from appium import webdriver from time import sleep desired_caps ={ 'platform ...
- python爬虫中遇到的问题以及解决方法
(1)运行后报错:“TypeError: cannot use a string pattern on a bytes-like” 原因:content用decode(‘utf-8’)进行解码,由by ...
- python应用-已知三角形的边长求他的面积和周长
""" 已知三角形的边长求他的面积和周长 Author:罗万财 Date:2017-3-3 """ import math a=float( ...
- Spring Boot 中集成 Redis 作为数据缓存
只添加注解:@Cacheable,不配置key时,redis 中默认存的 key 是:users::SimpleKey [](1.redis-cli 中,通过命令:keys * 查看:2.key:缓存 ...
- PLSQL 美化规则文件详解
PL/SQL中有个代码优化的功能,里面可以定义规则,挺好用的,跟大家分享下: 1.首先新建一个my.br文件,在文件中复制以下内容 Version=1 RightMargin=90 Indent=4 ...
- Go语言 - 反射
reflect包 在Go语言的反射机制中,任何接口值都由是一个具体类型和具体类型的值两部分组成的(我们在上一篇接口的博客中有介绍相关概念). 在Go语言中反射的相关功能由内置的reflect包提供,任 ...
- Game-Based Learning Is Changing How We Teach. Here's Why.
https://www.edsurge.com/news/2019-02-04-game-based-learning-is-changing-how-we-teach-here-s-why This ...
- smashing 三方widgets 使用
smashing 有一套自己的约定,包括widgets 以及dashboard,还有就是关于数据的处理 约定如下 三方widgets 统一在widgets 目录下,一般包含了基于coffee 的js ...