vba - 区分 Word 文档中的目录

标签 vba ms-word fieldcodes

有谁知道当以编程方式遍历 Word 文档时,您可以判断一个段落是否构成目录的一部分(或者实际上,构成字段一部分的任何其他内容)。

我提出这个问题的原因是我有一个 VB 程序,它应该从文档中提取前几段实质性文本——它是通过遍历 Word.Paragraphs 集合来实现的。我不希望结果包含目录或其他字段,我只想要人们可以识别为标题、标题或普通文本段落的内容。然而事实证明,如果有一个目录,那么不仅目录本身而且目录中的每一行在 Word.Paragraphs 中都显示为一个单独的项目。我不想要这些,但无法在 Paragraph 对象上找到任何允许我区分并忽略它们的属性(我猜我也需要将解决方案应用于其他字段类型,例如 table of数字和权威表,我还没有真正遇到过,但我想可能会导致同样的问题)

最佳答案

由于 Word 对象模型的限制,我认为实现此目的的最佳方法是暂时删除 TOC 域代码,遍历 Word 文档,然后重新插入 TOC。在 VBA 中,它看起来像这样:

Dim doc As Document
Dim fld As Field
Dim rng As Range

Set doc = ActiveDocument

For Each fld In doc.Fields
    If fld.Type = wdFieldTOC Then
        fld.Select
        Selection.Collapse
        Set rng = Selection.Range 'capture place to re-insert TOC later
        fld.Cut
    End If
Next

遍历代码以提取段落,然后
Selection.Range = rng
Selection.Paste

如果您在 .NET 中编码,这应该非常接近。此外,这应该适用于 Word 2003 及更早版本,但对于 Word 2007/2010,根据创建方式,TOC 有时会在其周围有一个类似内容控件的区域,这可能需要您编写额外的检测和删除代码.

关于vba - 区分 Word 文档中的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6622641/

相关文章:

html - Word html 格式 : insert a custom TOC via field code

ms-access - 无需打开表单即可获取表单记录源

excel - SumIf 在非事件工作表中并存储为数组元素

excel - VBA - 获取组合框的旧值

ms-word - Office URI 方案,来自模板(nft)的新文件未将文件保存在提供的位置

ms-word - 如何在Microsoft Word 中搜索和替换涉及字段?

VBA:验证列表设置

vba - 打开文档时,有没有办法在 Word 中显示 customUI 选项卡?

html - 如何让 CSS 背景图像显示在 Word 打开的 HTML 文件中?