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 文件进行操作的更多相关文章

  1. python使用xlrd模块读写Excel文件的方法

    本文实例讲述了python使用xlrd模块读写Excel文件的方法.分享给大家供大家参考.具体如下: 一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi ...

  2. python中configparser模块读取ini文件

    python中configparser模块读取ini文件 ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(se ...

  3. Python 中当前位置以及目录文件遍历操作

    Python 中当前位置以及目录文件遍历操作 当前位置 print(os.path.dirname(__file__)) 其中 dirname 会选择目录(文件夹),"__file__&qu ...

  4. Python中xlrd、xlwt、win32com模块对xls文件的读写操作

    # -*- coding: utf-8 -*- #xlrd和xlwt只支持xls文件读写,openpyxl只支持xlsx文件的读写操作 import xlrd import xlwt import w ...

  5. python 使用win32com实现对word文档批量替换页眉页脚

    最近由于工作需要,需要将70个word文件的页眉页脚全部进行修改,在想到这个无聊/重复/没有任何技术含量的工作时,我的内心是相当奔溃的.就在我接近奔溃的时候我突然想到完全可以用python脚本来实现这 ...

  6. python基础:os模块中关于文件/目录常用的函数使用方法

    Python是跨平台的语言,也即是说同样的源代码在不同的操作系统不需要修改就可以同样实现 因此Python的作者就倒腾了OS模块这么一个玩意儿出来,有了OS模块,我们不需要关心什么操作系统下使用什么模 ...

  7. 关于python包,模块,.pyc文件和文件导入理解

    参考文献 一.包 包是一个文件夹,用来存放模块和子包. 包里一般会有一个__init__.py的文件(也可以没有). 包里会有一个__pycache__文件夹,存放.py文件经解释器解释后的中间字节码 ...

  8. 吴裕雄--天生自然python学习笔记:python 用pygame模块处理音频文件

    除了对图片. Word 等普通格式的文件进行处理外, Python 还有强大的多媒体文件操作能力,如对音频.视频 文件的操作 . 如果要播放音乐,我们可以用 pygame 包中的 mixer 对 象. ...

  9. python 的基础学习 第九天 文件的操作

    1,文件操作 参数:1,文件路径  2,编码方式,3,执行动作(打开方式),只读,只写,,读写,追加和读写. 1  打开文件,得到文件句柄并赋值给一个变量.2. 通过句柄对文件进行操作.3. 关闭文件 ...

随机推荐

  1. vue项目积累

    (1)--save和--save-dev 安装到开发环境npm axios --save-dev 安装到生产环境npm axios --save .

  2. Win10上的Docker应用:Hello World

    前言: 最近学习了Docker相关技术点,国内关于Docker的资料大多是基于Linux系统的,但是我对Linux又不熟(实际上没用过,掩面哭笑.Jpg). 好在在Win10下也是支持Docker的, ...

  3. python爬虫中遇到的问题以及解决方法

    (1)运行后报错:“TypeError: cannot use a string pattern on a bytes-like” 原因:content用decode(‘utf-8’)进行解码,由by ...

  4. linux修改镜像

    修改为163yum源-mirrors.163.com 1.首先备份系统自带yum源配置文件/etc/yum.repos.d/CentOS-Base.repo [root@localhost ~]# m ...

  5. 清华大学&中国人工智能学会:2019人工智能发展报告

    2019年11月30日,2019中国人工智能产业年会重磅发布<2019人工智能发展报告>(Report of Artificial Intelligence Development 201 ...

  6. public private protected 修饰符整理

    1.public定义的类或方法:任何类的实例都可以访问 2.private定义的属性和方法:只能该类内部使用:如果子类要访问父类的private属性:必须实现__set()和__get()方法: 3. ...

  7. SDU暑假排位第一场 (Gym - 100889)

    啊今天有点挂机啊 D题和队友暴力后发现一组数据跑得飞快 然后遇上1e5组数据就没了..... 然后我疯狂优化暴力 然后去世了 最后半小时F也没写出来 主要还是最后有点慌并且没有考虑清楚 导致情况越写越 ...

  8. npm link 的用法

    npm link 的用法 先到对应的自定义包下执行 npm link 会读取对应的 packagejson 中的名称 然后到对应的目录下执行 npm link your/own/npm/name 就会 ...

  9. vue中使用时间插件、vue使用laydate

    <input id="time1" readonly="readonly" placeholder="这里选择时间" v-model= ...

  10. 深入分析Synchronized原理(阿里面试题)

    还有一篇 讲解lock的实现原理,参考:解决多线程安全问题-无非两个方法synchronized和lock 具体原理以及如何 获取锁AQS算法 (百度-美团) 记得开始学习Java的时候,一遇到多线程 ...