繁体   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