有没有人知道如何以编程方式迭代word文档,你可以判断一个段落是否构成了目录的一部分(或者实际上,是否构成了字段的一部分)。
我的理由是我有一个VB程序,它应该从文档中提取实质性文本的前几段 - 它是通过迭代Word.Paragraphs集合来实现的。我不希望结果包含目录或其他字段,我只想要人类会识别为标题,标题或普通文本段落的内容。但事实证明,如果有一个目录,那么不仅内容表本身而且内容表中的每一行都显示为Word.Paragraphs中的单独项目。我不想要这些,但是没有能够在Paragraph对象上找到任何可以让我区分的属性,所以忽略它们(我猜我需要解决方案也适用于其他字段类型,如表格当局的数字和表格,我还没有遇到,但我想可能会导致同样的问题)
答案 0 :(得分:2)
这不能保证,但如果标准的Word样式被用于TOC(极有可能),并且如果没有人添加自己的样式前缀为" TOC"那么就可以了。这是一种粗略的方法,但可行。
Dim parCurrentParagraph As Paragraph
If Left(parCurrentParagraph.Format.Style.NameLocal, 3) = "TOC" Then
' Do something
End If
答案 1 :(得分:1)
由于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(取决于它的创建方式)有时会有一个类似于内容控件的区域,可能需要您编写其他检测和删除代码
答案 2 :(得分:0)
您可以为文档的每个部分创建自定义样式。
Custom styles in Word 2003 (not sure which version of Word you're using)
然后,在遍历段落集合时,您可以检查.Style属性,如果它等于您的TOCStyle,则安全地忽略它。
我相信同样的技术也适用于桌子。