如何将 MS Word 段落对象(来自 VBA)转换为 python 字符串
How to convert a MS Word paragraph object (from VBA) into python string
所以我想做的是使用 "pywin32" 模块从 python 访问 Microsoft Word API(用 VBA 编写)。具体来说,我需要遍历整个 .docx 文件并找到某个字符串出现的位置并在其后添加一些文本。我使用 Document.Paragraphs.Items(index) 成功地从文件中提取了一些段落并将它们打印出来,但是当我尝试将它与我的硬编码字符串进行比较以查看它们是否匹配时,它总是错误的,我做了一些对我从 .docx 文件中获得的段落进行类型检查,然后意识到它不是 python 字符串,这就是为什么它与我的字符串不匹配的原因。下面是我写的一些代码来显示正在发生的事情:
word = win32.gencache.EnsureDispatch('Word.Application')
word.Documents.Open('xxxxxxxxx.docx')
string = word.Documents(1).Paragraphs.Item(3)
print string
if string == "My Hard Coded String":
print "True"
else:
print "False"
所以上面的代码片段总是给我错误,即使在第 4 行打印出的字符串正好是 "My Hard Coded String",我正在阅读 VBA 文档,但似乎没有任何对象或与将段落实例转换为 python 字符串有关的方法(这可能是一个奇怪的陈述,因为 VBA 与 python 无关但是......试图总结我的问题更清楚),关于我应该如何实现这一目标的任何想法?提前致谢!
更多编辑:
有人回答了我的问题,但我不知道在哪里可以找到 Paragraph.Range 的所有 objects/properties。我一直在查看 MSDN,我认为他们没有列出属于 "Range" 的任何属性。
Word 对象模型不是用 VBA 编写的(尽管该文档是针对 VBA 开发人员的)。它被编写为与语言无关的二进制对象 API ,可以从多种语言访问。 (有关使用 VBA 和 Python 访问对象模型的比较,请参阅 here。)
在你的情况下,这个:
word.Documents(1).Paragraphs.Item(3)
returns Paragraph 对象的实例,不等同于字符串。这是有道理的,因为 Word 段落不仅仅是一个字符串——它可能包括段落级格式、首字下沉等、字符级格式等。
您需要首先通过段落的Range property. The Range对象获取段落对应的Range对象:
corresponds to a contiguous area of the document
那么你需要 Range 对象的 Text property。
像这样:
word = win32.gencache.EnsureDispatch('Word.Application')
word.Documents.Open('xxxxxxxxx.docx')
string = word.Documents(1).Paragraphs(3).Range.Text
print string
if string == "My Hard Coded String":
print "True"
else:
print "False"
注意。我没有测试过,但我认为您不需要显式调用 Paragraphs.Item
。对象模型支持一个称为 默认属性 的概念,这意味着(至少在 Python 中)您可以将参数传递给具有默认 属性 的对象,并且这些参数将传递给 属性。换句话说,以下是等价的:
string = word.Documents(1).Paragraphs(3).Range.Text
string = word.Documents.Item(1).Paragraphs.Item(3).Range.Text
我认为这也是为什么您的代码中的 print string
打印出字符串的原因。不是因为 string
是另一种字符串,而是因为默认的 属性 链如下: Paragraph.Range.Text
;当需要一个简单的值(而不是一个对象)时,链会一直跟踪到最后,这是 Text
属性.
处的字符串
参考:
- Paragraphs collection, Paragraphs.Item method
- Paragraph object, Paragraph.Range property
- Range object, Range.Text property
请注意(在当前文档格式中)左侧有一个对象列表,每个对象都可以展开以列出特定对象的 properties/methods。
所以我想做的是使用 "pywin32" 模块从 python 访问 Microsoft Word API(用 VBA 编写)。具体来说,我需要遍历整个 .docx 文件并找到某个字符串出现的位置并在其后添加一些文本。我使用 Document.Paragraphs.Items(index) 成功地从文件中提取了一些段落并将它们打印出来,但是当我尝试将它与我的硬编码字符串进行比较以查看它们是否匹配时,它总是错误的,我做了一些对我从 .docx 文件中获得的段落进行类型检查,然后意识到它不是 python 字符串,这就是为什么它与我的字符串不匹配的原因。下面是我写的一些代码来显示正在发生的事情:
word = win32.gencache.EnsureDispatch('Word.Application')
word.Documents.Open('xxxxxxxxx.docx')
string = word.Documents(1).Paragraphs.Item(3)
print string
if string == "My Hard Coded String":
print "True"
else:
print "False"
所以上面的代码片段总是给我错误,即使在第 4 行打印出的字符串正好是 "My Hard Coded String",我正在阅读 VBA 文档,但似乎没有任何对象或与将段落实例转换为 python 字符串有关的方法(这可能是一个奇怪的陈述,因为 VBA 与 python 无关但是......试图总结我的问题更清楚),关于我应该如何实现这一目标的任何想法?提前致谢!
更多编辑: 有人回答了我的问题,但我不知道在哪里可以找到 Paragraph.Range 的所有 objects/properties。我一直在查看 MSDN,我认为他们没有列出属于 "Range" 的任何属性。
Word 对象模型不是用 VBA 编写的(尽管该文档是针对 VBA 开发人员的)。它被编写为与语言无关的二进制对象 API ,可以从多种语言访问。 (有关使用 VBA 和 Python 访问对象模型的比较,请参阅 here。)
在你的情况下,这个:
word.Documents(1).Paragraphs.Item(3)
returns Paragraph 对象的实例,不等同于字符串。这是有道理的,因为 Word 段落不仅仅是一个字符串——它可能包括段落级格式、首字下沉等、字符级格式等。
您需要首先通过段落的Range property. The Range对象获取段落对应的Range对象:
corresponds to a contiguous area of the document
那么你需要 Range 对象的 Text property。
像这样:
word = win32.gencache.EnsureDispatch('Word.Application')
word.Documents.Open('xxxxxxxxx.docx')
string = word.Documents(1).Paragraphs(3).Range.Text
print string
if string == "My Hard Coded String":
print "True"
else:
print "False"
注意。我没有测试过,但我认为您不需要显式调用 Paragraphs.Item
。对象模型支持一个称为 默认属性 的概念,这意味着(至少在 Python 中)您可以将参数传递给具有默认 属性 的对象,并且这些参数将传递给 属性。换句话说,以下是等价的:
string = word.Documents(1).Paragraphs(3).Range.Text
string = word.Documents.Item(1).Paragraphs.Item(3).Range.Text
我认为这也是为什么您的代码中的 print string
打印出字符串的原因。不是因为 string
是另一种字符串,而是因为默认的 属性 链如下: Paragraph.Range.Text
;当需要一个简单的值(而不是一个对象)时,链会一直跟踪到最后,这是 Text
属性.
参考:
- Paragraphs collection, Paragraphs.Item method
- Paragraph object, Paragraph.Range property
- Range object, Range.Text property
请注意(在当前文档格式中)左侧有一个对象列表,每个对象都可以展开以列出特定对象的 properties/methods。