有时,使用Python替换Word文档中的文字时,默认操作可能破坏原有格式,这时可以利用Python的Win32com功能来实现。接下来,将介绍如何通过Find.Execute方法来进行内容的查找与替换。
以下是微软官方这个方法参考的释义
名稱 | 必要/選用 | 資料類型 | 描述 |
|---|---|---|---|
FindText | 選用 | Variant | 要搜尋的文字。 請使用空字串 ("") 來單獨搜尋格式。 您可以藉由指定適當的字元程式碼來搜尋特殊字元。 例如,"^p" 會對應至段落標記,而 "^t" 會對應至定位字元。 |
MatchCase | 選用 | Variant | True 是表示 指定之 find 文字是區分大小寫。 對應於「尋找與替換」對話框 (編輯選單) 中的「匹配案件」勾選框。 |
MatchWholeWord | 選用 | Variant | True 是表示 讓尋找作業找出整個單字,不屬於較長的單字的文字。 會對應至 [ 尋找及取代] 對話方塊中的 [ 全字拼寫須相符] 核取方塊。 |
MatchWildcards | 選用 | Variant | True 是表示 讓尋找文字是特別的搜尋運算子。 會對應至 [ 尋找及取代] 對話方塊中 使用萬用字元] 核取方塊。 |
MatchSoundsLike | 選用 | Variant | True 是表示 讓尋找作業找出 words 類似尋找文字的聲音。 會對應至 [ 尋找及取代] 對話方塊中的 類似的聲音] 核取方塊。 |
MatchAllWordForms | 選用 | Variant | True 是表示 讓尋找作業找出所有形式的尋找文字 (例如"sit 這個"會找出"坐"和"坐")。 會對應至 [ 尋找及取代] 對話方塊中的 [ 尋找所有形態] 核取方塊。 |
Forward | 選用 | Variant | True 是表示 向前搜尋 (直到文件的結尾)。 |
Wrap | 選用 | Variant | 如果搜尋是從文件開頭以外的位置開始而且到達文件的結尾,這個引數會控制將發生的事件 (如果 Forward 設定為 False,則會相反)。 此引數也會控制如果選取範圍或選取範圍或範圍中找不到範圍和搜尋文字會發生什麼事。 可能是 WdFindWrap 常數之一。 |
Format | 選用 | Variant | True 是表示 讓尋找作業找出格式中及 (或) 而不是、 尋找文字。 |
替換 | 選用 | Variant | 取代文字。 若要刪除 Find 引數指定的文字,請使用空字串 ("")。 您可以指定特殊字元和進階搜尋準則,就如同針對 Find 引數所做的一樣。 若要將圖形物件或其他非文字項目指定為取代項目,請將此項目移至 [剪貼簿] 並針對 ReplaceWith 指定 "^c"。 |
Replace | 選用 | Variant | 指定所要進行的取代數目: 一個、 全部或無。 可以是任何 WdReplace 常數。 |
MatchKashida | 選用 | Variant | True 是表示 如果尋找作業使用比對 kashida 阿拉伯文文件中的文字。 此引數可能無法使用時,根據您所選取或安裝的語言支援 (例如 US English)。 |
MatchDiacritics | 選用 | Variant | True 是表示 如果尋找作業對符合從右至左語言之文件中的讀音符號的文字。 此引數可能無法使用時,根據您所選取或安裝的語言支援 (例如 US English)。 |
MatchAlefHamza | 選用 | Variant | True 是表示 如果尋找作業使用比對 alef hamzas,搜尋在阿拉伯文文件中的文字。 此引數可能無法使用時,根據您所選取或安裝的語言支援 (例如 US English)。 |
MatchControl | 選用 | Variant | True 是表示 如果尋找作業對符合從右至左語言文件中的雙向控制字元的文字。 此引數可能無法使用時,根據您所選取或安裝的語言支援 (例如 US English)。 |
MatchPrefix | 選用 | Variant | True 是表示 要比對搜尋字串開頭的文字。 會對應至 [ 尋找及取代] 對話方塊中的 [ 前置詞須相符] 核取方塊。 |
MatchSuffix | 選用 | Variant | True 是表示 以符合文字結尾的搜尋字串。 會對應至 [ 尋找及取代] 對話方塊中的 相符項目尾碼] 核取方塊。 |
MatchPhrase | 選用 | Variant | True 是表示 會忽略所有空格和控制字元單字之間。 |
IgnoreSpace | 選用 | Variant | True 是表示 會忽略單字之間的空格。 會對應至 [ 尋找及取代] 對話方塊中的 [ 略過空白字元] 核取方塊。 |
IgnorePunct | 選用 | Variant | True 是表示 會忽略文字間所有標點符號字元。 會對應至 [ 尋找及取代] 對話方塊中的 [ 略過標點符號] 核取方塊。 |
import os
import win32com.client
docx_path = 'demo.docx'
app = win32com.client.DispatchEx("Kwps.Application")
doc = app.Documents.Open(os.path.abspath(docx_path), ReadOnly=0)
oldstr = "hello"
newstr = "world"
app.Selection.Find.Execute(oldstr, False, False, False, False, False, True, 1, False, newstr, 2)
doc.Close()
app.Quit()
OldStr:搜索词True:是否区分大小写True:完全匹配的单词,而非单词中的部分(全字匹配)。True:使用通配符。True:同音。True:查找单词的各种形式。True:向文档尾部搜索。True:搜索的文本需要与原始文本完全匹配,包括格式。NewStr:替换的新文本2:替换的个数,其中0表示不替换,1表示只替换第一个匹配到的文本,而2表示替换所有匹配到的文本。更多方法参考
https://learn.microsoft.com/zh-tw/office/vba/api/word.find.execute