[英]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.