【问题标题】:Adding a table of contents to a Microsoft Word Document using vbs使用 vbs 将目录添加到 Microsoft Word 文档
【发布时间】:2014-08-06 20:10:50
【问题描述】:

我正在尝试编写一个 vbs 脚本来创建一个包含目录的 word 文档。我能够插入目录,但无法填充表格。

Set oInfo = Dictionary.Items("Use Case")
    For Each oInfo in oInfo

        Set entryRange = objSelection.Range
        objDoc.TablesOfContents.MarkEntry entryRange, oInfo("Name"), oInfo("Name"), W, 1
        objSelection.TypeText "Info" + vbNewline + oInfo("Name")
        objSelection.TypeParagraph()
    Next
objDoc.TablesOfContents.Add(tocRange)

这导致目录被正确插入,但只显示“未找到目录条目。”此外,在文档的末尾,我得到了奇怪的无格式文本,看起来像这个: {TC "Info1" \f C \| “1”} 对于我在 For 循环中使用每个部分的正确标题迭代的每个对象,都会重复此操作。我觉得我走在正确的轨道上,但我对 TablesOfContents 对象的了解还不够,无法做我想做的事情。我认为主要问题之一是markEntry 函数中的TableId 字段。

【问题讨论】:

    标签: vbscript ms-word


    【解决方案1】:

    当您使用 MarkEntry 时,Word 会插入一个 { TC } 字段。这就是那些“奇怪的无格式文本”的东西。它们没有可见的结果,因此如果您切换到字段结果视图(Windows Word 上的 Alt-F9)并且不显示隐藏文本,它们将完全消失。因此,它们通常是在文档完全填充后在文档中的适当位置添加的内容。我猜想大多数 ToC 实际上是从标题级别或大纲级别获取它们的条目。如果您深入了解 Word 本身的相关部分并尝试各种 ToC 选项,您应该能够更好地了解这些东西的工作原理。

    当您插入目录时,您还会得到一个字段。目前您的代码可能正在插入

    { TOC \o "1-9" }
    

    这将从大纲级别 1-9 的段落中获取条目。但它不会插入来自 TC 字段的条目。为此,您需要(至少)

    { TOC \f C }
    

    (因为 C 是您在您的 TC 字段中使用的标识符。)

    您可以在 VBA 代码中使用

    objDoc.TablesOfContents.Add Range:=tocRange, UseFields:=True, TableID:="C"
    

    如果您仍需要从“大纲级别”中引入条目,则需要将 .Add 方法中的相应参数设置为 True。

    在您的代码中的某个时刻,您可能还需要找到 TOC 字段并“更新”它。

    顺便说一句,如果您无法通过对象模型的 .Add 和 .MarkEntry 字段访问所需的所有字段功能,也可以更直接地插入大多数字段代码,例如通过将“wdFieldEmpty”类型的字段添加到范围并提供其字段代码。

    【讨论】:

    • 感谢您的回复。我能够将目录插入到我的文档中,但现在我正在尝试正确显示页码。截至目前,目录的所有部分都显示文档的最后一页,当我单击其中一个条目时,它会将我带到文档的末尾,其中标识符为:{TC "Info1" \f C \| “1”} 的位置。我不确定我需要做什么来表示每个条目的结束。
    • 如果您使用 TC 字段,它们需要在文档中的正确位置。例如,如果您的 ToC 需要有一个显示“看这里........2”的条目,其中 2 是页码,那么 { TC } 字段需要在第 2 页上。那么问题变成“你的代码应该如何决定你的 TC 字段需要在哪里?”目前,我认为这只是将它们全部放在 Selection 所在的位置。
    • 我能弄明白。从您的 cmets 中,我可以得出结论,我不需要使用 TC 字段。我能够将标题设置为“标题 1”样式并以这种方式填充目录。
    猜你喜欢
    • 2012-06-16
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    相关资源
    最近更新 更多