Python 使用 win32com 模块对word文件进行操做

what's the win32com 模块

  win32com 模块主要为 Python 提供调用 windows 底层组件对 word 、Excel、PPT 等进行操做的功能,只能在 Windows 环境下使用,而且须要安装 office 相关软件才行(WPS也行)。html

  使用 win32com 模块主要是由于 Python 针对 word 文档操做的第三方库相对较少而且功能较弱,Python 有针对 .docx 后缀文件的第三方库如 python-docx、pydocx等等,可是没有针对 .doc 和 .wps 的第三方库,因此这里就只能使用 win32com 模块。 相对而言 Python 针对 Excel文档操做的第三方库就很是友好python

pip install pywin32
import win32com
# 最经常使用的模块实际上是win32com.client

 

基本操做

模拟打开 officewindows

word = win32com.client.Dispatch('Word.Application')
# 或者使用下面的方法,使用启动独立的进程:
# word = win32com.client.DispatchEx('Word.Application')

 

声明属性api

word.Visible = 0 # 后台运行
word.DisplayAlerts = 0 # 不显示,不警告
# 若是不声明上述属性,运行的时候会显示的打开office软件操做文档

 

打开文件多线程

doc = word.Documents.Open('xxx.doc) # 打开一个已有的word文档
# new_doc = word.Documents.Add() # 建立新的word文档

 

读取内容app

data = doc.paragraphs[0].text

 

插入文字ide

 # 在文档开头添加内容
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?') 

 

 

针对关键词的操做网站

  应用场景:搜索关键字,将目标关键字替换为指定文字,或者更改关键字颜色、背景色等等ui

  • 文字替换
    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

 

页眉文字替换spa

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
        '''
转码的码
相关文章
相关标签/搜索