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

Vbscript 使用vbs将目录添加到Microsoft Word文档,vbscript,ms-word,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"),

我正在尝试编写一个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循环中迭代的每个对象,这都会重复,每个部分都有正确的标题。我觉得我走在了正确的轨道上,但我对TableOfContents对象了解不够,无法做我想做的事情。我认为其中一个主要问题是markEntry函数中的TableId字段。

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

插入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需要有一个条目,上面写着Look here…….2,其中2是页码,{TC}字段需要在第2页上。那么问题就变成了代码应该如何决定TC字段需要在哪里?目前,我认为这只是把它们都放在选择的地方。我能够找到答案。从您的评论中,我可以得出结论,我不需要使用TC字段。我能够将标题设置为标题1样式,并以这种方式填充目录。