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. Cobbler--自动化部署

    Cobbler自动化部署 cobbler简介 Cobbler 可以用来快速建立 Linux 网络安装环境,它已将Linux网络安装的技术门槛,从大专以上文化水平,成功降低到了初中水平,连补鞋匠都能学会 ...

  2. Android中UID和PID的作用和区别

    PID:为Process Identifier, PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID.进程中止后PID被系统回收,可能会被继续分配给新运行的程序,但是在a ...

  3. 安卓QQ聊天记录导出、备份完全攻略

    发到知乎竟然被删掉,我也不知道我到底违反了哪条.唉,别人的毕竟是别人的.虽然博客园也是别人的 前言 我对聊天记录的备份比较执着,也在这上面折腾过不少.碰到过不少令人头疼的麻烦,在这里分享一下经验. 关 ...

  4. js动画--封装透明度

    这一章我将讲述一些如何将透明度的变化也封装到调用函数中,对于前面几节课的介绍,已经将基本的属性封装到函数中了,宽,长等属性.关于透明度的变化还是有一点区别的,这一章我将封装透明度 先创建一个div & ...

  5. 使用Jedis操作Redis数据库

    Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java.C.C#.C++.php.Node.js.Go等. 在官方网站里列一些Java的客户端,有Jedis.Redisson ...

  6. Git推送文件时,出现的Couldn't load this key(OpenSSH SSH-2 private key (old PEM format))

    在进行推送到远程仓库的过程中遇到的一个错误. 解决方法: 找到这个位置 然后打开文件所在位置 再打开这个文件然后再 导入成功 然后点击save private key这个按钮 就可以成功的生成一个文件 ...

  7. spark-shell操作hive

    本文是在集群已经搭建好的基础上来说的,还没有搭建好集群的小伙伴还请自行百度! 启动spark-shell之前要先启动hive metastore 和 hiveservice2 hive --servi ...

  8. Angular vs React---React-ing to change

    这篇文章的全局观和思路一级棒! The Fairy Tale Cast your mind back to 2010 when users started to demand interactive ...

  9. C++编译器与链接器工作原理

    http://blog.csdn.net/success041000/article/details/6714195 1. 几个概念 1)编译:把源文件中的源代码翻译成机器语言,保存到目标文件中.如果 ...

  10. log4j2 配置文件解读

    1.日志相关介绍 日志接口(slf4j):slf4j是对所有日志框架制定的一种规范.标准.接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用,比如log4j.l ...