python - 使用 win32com.client api 打开 MS Word 2016 并访问 formFileds 时如何解决 AttributeError?

标签 python python-2.7 ms-word win32com

我正在努力使用 python 自动生成报告。在Word文档中,我需要更新表单字段以完成报告生成。 在使用 win32.com.client.gencache.EnsureDispatch api 时,我无法从 Word 文档获取 formFields。

下面是编写的脚本:

我收到以下错误:

    raise AttributeError("'%s' object has no attribute '%s'" % (repr(self), attr))
AttributeError: '<win32com.gen_py.Microsoft Word 16.0 Object Library.FormFields instance at 0x2217380698888>' object has no attribute '__getitem__'

我尝试搜索有关如何获取 Word 文档中存在的 FormFields 的帮助,但找不到有关我收到的错误的任何正确文档。

word = win32.gencache.EnsureDispatch('Word.Application')
word.Visible='False'
file = os.path.abspath(path)
d = word.Documents.Open(file)
d.FormFields[0].Result = reviewer

d.FormFields[0].Result 应该是有效的属性。

在打印 d 时,必须知道该对象根本不包含任何 FormField。

['CLSID', '__doc__', '__getattr__', '__init__', '__module__', '__repr__', '__setattr__', '_dispobj_', 'coclass_interfaces', 'coclass_sources', 'default_interface', 'default_source']

最佳答案

您的变量d不包含Python对象。它包含一个带有 VBA 接口(interface)的 COM 对象的精简 Python 包装器。

打印 Python 对象的 dir 将显示其 Python 属性。但 FormFields 是 COM 对象的 VBA 属性。打印 dir(d) 不会显示 COM 对象的 VBA 属性。

但是如果您的文档中有表单,您可以像这样看到它们:

>>> list (d.FormFields)

再次查看您的错误消息。它说

AttributeError: '<win32com.gen_py.Microsoft Word 16.0 Object Library.FormFields instance at 0x2217380698888>' object has no attribute '__getitem__'

该错误消息确认 VBA 对象 FormFields 是有效属性并且实际存在,因为该消息为其 Python 包装器提供了内存位置。

您的问题出在其他地方。我怀疑 FormFields 不包含您所期望的内容。其中必须有某些内容,否则您会收到 IndexError,但您可以按如下方式检查:

>>> d.FormFields.Count

如果您想了解 COM 对象的属性是什么,请查看 VBA 文档。

顺便说一句,作为初学者,在现阶段,您确实不应该投入时间学习 Python 2。对 Python 2 的支持将于今年年底停止。我们中的一些人别无选择,只能继续使用 Python 2,但如果你有选择,那就切换吧,等等。

关于python - 使用 win32com.client api 打开 MS Word 2016 并访问 formFileds 时如何解决 AttributeError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56967306/

相关文章:

python - 以编程方式获取当前的 IPython 笔记本单元格输出?

python - 不同行的正则表达式 - python

python - 从其他聚合内部检索聚合

python - 重新排序簇号以实现正确对应

python - 如何使用 subprocess.Popen 更新目录以在 Python 中查找新文件

android - 在 Android 终端中运行 Python for Android (Qpython)

vba - 重复 Microsoft Word VBA 直到找不到搜索结果

excel - 从 Word 宏中查找 Excel 单元格引用

excel - 找到特定单词后找到句子的其余部分

python - .mat v7.3 文件中 char 和 uint16 编码之间的差异