6

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

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

4

3 回答 3

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

遍历代码以提取段落,然后

Selection.Range = rng
Selection.Paste

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

于 2011-08-04T04:21:06.063 回答
3

这不能保证,但如果 TOC 使用标准 Word 样式(很有可能),并且如果没有人添加自己的样式并以“TOC”为前缀,则可以。这是一种粗略的方法,但可行。

Dim parCurrentParagraph As Paragraph

If Left(parCurrentParagraph.Format.Style.NameLocal, 3) = "TOC" Then

       '    Do something 

End If
于 2016-08-16T21:03:52.603 回答
0

您可以做的是为文档的每个部分创建自定义样式。

Word 2003 中的自定义样式(不确定您使用的是哪个版本的 Word)

然后,在遍历段落集合时,您可以检查 .Style 属性,如果它等于您的 TOCStyle,则可以安全地忽略它。

我相信同样的技术也适用于表格。

于 2011-07-10T02:21:25.883 回答