【发布时间】:2023-03-21 12:29:01
【问题描述】:
开放 XML 标准定义的“运行”本质上是组成段落的文本字符串(如果我理解正确的话)。我很好奇是否有人知道在“运行”级别而不是段落级别访问文档的方法。例如:
dim tRun as Run
for each tRun in Activedocument.Runs
'Some code
next tRun
显然,上述方法不起作用。这可以通过 VBA 实现吗?
【问题讨论】:
开放 XML 标准定义的“运行”本质上是组成段落的文本字符串(如果我理解正确的话)。我很好奇是否有人知道在“运行”级别而不是段落级别访问文档的方法。例如:
dim tRun as Run
for each tRun in Activedocument.Runs
'Some code
next tRun
显然,上述方法不起作用。这可以通过 VBA 实现吗?
【问题讨论】:
我从未听说过“跑步”。但是当您提到 XML 标准时,我假设您的运行是指段落中所有“子部分”的摘要,例如可能有特殊格式。为了澄清这个想法:
<p>And so quote the raven: <italic>Nevermore!</italic></p>
所以在这个例子中,“所以引用 raven:”和“Nevermore!”将是两次运行。
但是,Word 对象模型包含许多集合。 ActiveDocument.Paragraphs 只是其中之一。还有:
ActiveDocument.CharactersActiveDocument.WordsActiveDocument.SentencesActiveDocument.Fields等等。通过这个集合,您可以选择任何较小的文本片段。但是要解决这些问题,您不必通过一个段落。
所有这些较小文本的共同点是Range 属性。你可以检查任何一块的范围,它会有一个Start 和End 数字。这些明确地是您可以直接计算的文档中的字符数。此外,Range 有一个Font 属性。在这个Font 属性中,存储了适合“运行”初始定义的所有信息。
获取文本片段的更进一步、更动态的方法是使用ActiveDocuments.Range(start, end)。这样,您将获得一个 Range 对象,该对象再次包含上述所有集合:字符、单词、段落、句子等。范围的集合仅包含实际位于范围内的项目,与文档的集合相反.
总结一下:在 word 文档中,您没有运行,但您有几个复杂的集合。集合由明确的开始和结束范围编号连接。所以你可以从段落到它的单词,或者从一个句子到包含的段落等等。
为了进一步了解,您可能想阅读 MSDN 上的 Word 对象模型,或者只是在监视窗口的 VBA 编辑器中检查 Word 文档中的模型。
【讨论】:
和字体标签。该段落可以包含许多不同的字体标签来描述文本块。运行就像其中之一字体标签。运行的 XML 标签是 标签内。 标签可以包含多个 和 标签相同。