【问题标题】:Word VBA: Access the "Runs" of the documentWord VBA:访问文档的“运行”
【发布时间】:2023-03-21 12:29:01
【问题描述】:

开放 XML 标准定义的“运行”本质上是组成段落的文本字符串(如果我理解正确的话)。我很好奇是否有人知道在“运行”级别而不是段落级别访问文档的方法。例如:

dim tRun as Run

for each tRun in Activedocument.Runs
    'Some code
next tRun

显然,上述方法不起作用。这可以通过 VBA 实现吗?

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    我从未听说过“跑步”。但是当您提到 XML 标准时,我假设您的运行是指段落中所有“子部分”的摘要,例如可能有特殊格式。为了澄清这个想法:

    <p>And so quote the raven: <italic>Nevermore!</italic></p>
    

    所以在这个例子中,“所以引用 raven:”和“Nevermore!”将是两次运行。

    但是,Word 对象模型包含许多集合。 ActiveDocument.Paragraphs 只是其中之一。还有:

    • ActiveDocument.Characters
    • ActiveDocument.Words
    • ActiveDocument.Sentences
    • ActiveDocument.Fields

    等等。通过这个集合,您可以选择任何较小的文本片段。但是要解决这些问题,您不必通过一个段落。

    所有这些较小文本的共同点是Range 属性。你可以检查任何一块的范围,它会有一个StartEnd 数字。这些明确地是您可以直接计算的文档中的字符数。此外,Range 有一个Font 属性。在这个Font 属性中,存储了适合“运行”初始定义的所有信息。

    获取文本片段的更进一步、更动态的方法是使用ActiveDocuments.Range(start, end)。这样,您将获得一个 Range 对象,该对象再次包含上述所有集合:字符、单词、段落、句子等。范围的集合仅包含实际位于范围内的项目,与文档的集合相反.

    总结一下:在 word 文档中,您没有运行,但您有几个复杂的集合。集合由明确的开始和结束范围编号连接。所以你可以从段落到它的单词,或者从一个句子到包含的段落等等。

    为了进一步了解,您可能想阅读 MSDN 上的 Word 对象模型,或者只是在监视窗口的 VBA 编辑器中检查 Word 文档中的模型。

    【讨论】:

    • 这是正确的概念,但我认为您可能需要阅读 OpenXML 标准。这是“.docx”中的“x”。就 HTML 而言,您有一个段落

      和字体标签。该段落可以包含许多不同的字体标签来描述文本块。运行就像其中之一字体标签。运行的 XML 标签是 ,它位于

      标签内。 标签有 子标签(分别运行属性和文本)。一个

      标签可以包含多个 标签,其方式与我提供的 HTML 示例中的

      标签相同。

    • Word 文档在内存中的对象结构(可通过 VBA 访问)与其以 docx 表示的对象结构之间存在细微差别。您的问题是寻求一种方法来解析比 VBA 段落更小的单元。因此,我的回答集中在 VBA 集合上。使用 VBA 编辑器检查单词段落后,您将看到每个字符都有其字体信息等等。要解析 docx XML,您需要其他工具。
    • 我明白了。我的问题比你假设的要具体得多。我正在寻找类似跑步集合的东西。这似乎是不可能的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    相关资源
    最近更新 更多