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
        '''
轉碼的碼
相關文章
相關標籤/搜索