使用Python的win32com .client无法找到并替换文本

2024-03-28 21:11:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在word文档中找到一个文本并替换其他文本。我继续得到错误。在

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

我试图直接给出文本,也通过赋值给一个变量,但它仍然不起作用下面是我的代码。在

^{2}$

它总是找不到文本

我尝试了file\u date=“<;date>;”和rundate等变量=日期:今天()

但还是没用。在

有什么建议可以避免这种情况吗。在

谨致问候, 任。在


Tags: 代码text文档文本date错误notproperty
1条回答
网友
1楼 · 发布于 2024-03-28 21:11:56

我自己试过了,但是有很多小问题。在

1)对于wdReplaceAll常量,需要在Python中分别加载这些常量。这不是很好的文件,我花了一段时间才发现自己,第一次我也需要它。你可以通过单词“wd”或Excel前缀“xl”来判断某个东西是常量。在

2)我用过gencache.EnsureDispatch. 不过,你可以试着用调度。我不确定这两种方法都能奏效,但可能会。在

3)当我尝试用3.Find命令在不同的行上运行时,我无法得到任何结果。一旦我将它们合并到Execute()参数中,它就起作用了。在

4)如果我直接将日期对象传递给它,它会将"< DATE >"的所有出现替换为"00:00:00"。但是,如果我在python中将date对象转换为string并传递它,它就可以工作了。不过,您可能需要更改日期的格式。签出日期时间的文档。很简单。在

5)您向代码传递了一个“选择”对象。我不确定默认选择是否只是“一切”,而没有选择。我改为迭代段落对象。这将产生更加一致的结果

这是我的代码:

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)

我希望这对你有用。如果你对这个解决方案有任何疑问,请告诉我。在

相关问题 更多 >