使用vbs将目录添加到Microsoft Word文档

时间:2014-08-06 20:10:51

标签: vbscript ms-word

我正在尝试编写一个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对象的了解不够,无法做我想做的事情。我认为其中一个主要问题是TableId函数中的markEntry字段。

1 个答案:

答案 0 :(得分:0)

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

当您插入TOC时,您还会获得一个字段。在你的代码中,您的代码可能正在插入

{ TOC \o "1-9" }

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

{ TOC \f C }

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

您可以使用

在VBA代码中执行此操作
objDoc.TablesOfContents.Add Range:=tocRange, UseFields:=True, TableID:="C"

如果您仍然需要从"大纲级别"那么你需要在.Add方法中将适当的参数设置为True。

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

另外,如果您无法通过对象模型的.Add和.MarkEntry字段访问所需的所有现场设施,则还可以更直接地插入大多数字段代码,例如:通过添加" wdFieldEmpty"类型的字段到一个范围并提供其域代码。