区分Word文档中的目录

Pha*_*mer 5 vba ms-word fieldcodes

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

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

joe*_*hwa 3

由于 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
Run Code Online (Sandbox Code Playgroud)

迭代代码以提取段落,然后

Selection.Range = rng
Selection.Paste
Run Code Online (Sandbox Code Playgroud)

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