簡體   English   中英

無法使用 python 使用 win32com .client 查找和替換文本

[英]Unable to find and replace text with win32com .client using python

我正在嘗試在 Word 文檔中查找文本並將其替換為其他文本。 我繼續收到錯誤。

AttributeError: Property '<unknown>.Text' can not be set.

我嘗試直接給文本,也通過分配給一個變量,但它仍然不起作用下面是我的代碼。

import win32com.client
import win32api
from datetime import date

path_docx=r'C:\Docs\Approved 10_18_17_TAY.docx'
word = win32com.client.Dispatch('Word.Application')
word.Visible = True
doc=word.Documents.Open(path_docx)
word.Selection.Find.Text = "< DATE >"
word.Selection.Find.Replacement.Text=date.today()
word.Selection.Find.Execute(Replace=word.WdReplace.wdReplaceAll)

它總是無法找到文本

我嘗試了像 file_date="< DATE >" 和 rundate=date.today() 這樣的變量

還是不行。

任何建議如何避免這種情況。

問候,任。

我自己試過,但是有很多小問題。

1) 對於 wdReplaceAll-constant,您需要在 Python 中單獨加載常量。 這沒有得到很好的記錄,我花了一段時間才找到自己,這是我第一次也需要它。 您可以通過 Word 的“wd”或 Excel 前綴的“xl”來判斷某些內容是否為常量。

2)我使用了gencache.EnsureDispatch。 不過你可以只用 Dispatch 試試。 我不確定它會以兩種方式工作,但可能會。

3)當我嘗試在單獨的行上使用 3 個 .Find 命令運行它時,我無法得到任何結果。 一旦我將它全部合並到 Execute() 參數中,它就起作用了。

4)如果我直接將日期對象傳遞給它,它會將所有出現的"< DATE >"替換為"00:00:00" 但是,如果我在 python 中將日期對象轉換為字符串並傳遞它,它就可以工作。 不過,您可能想要更改日期的格式。 查看 datetime 的文檔。 它很簡單。

5)您向代碼傳遞了“選擇”對象。 當尚未選擇任何內容時,我不確定默認選擇是否只是“所有內容”。 我將其更改為迭代 Paragraphs 對象。 這應該會產生更一致的結果

這是我的代碼:

import win32com.client as win32
from datetime import date

today = str(date.today())

path_docx='C:\\Scripts\\test.docx' #< obviously you need to change that
word = win32.gencache.EnsureDispatch('Word.Application')
const = win32.constants
word.Visible = True
doc=word.Documents.Open(path_docx)
for paragraph in doc.Paragraphs:
    print(paragraph)
    paragraph.Range.Find.Execute(FindText="< DATE >", ReplaceWith=today, Replace=const.wdReplaceAll)

我希望這對你有用。 如果您對此解決方案有任何疑問,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM