6

Word文書をプログラムで反復処理するときに、段落が目次の一部を形成しているかどうか(または実際には、フィールドの一部を形成する他のもの)を知る方法を知っている人はいますか?

質問する理由は、文書から実質的なテキストの最初の数段落を抽出することになっている VB プログラムを持っているからです。これは、Word.Paragraphs コレクションを反復処理することによって行っています。結果に目次やその他のフィールドを含めたくありません。人間がヘッダー、タイトル、または通常のテキスト段落として認識するものだけが必要です。ただし、目次がある場合、目次自体だけでなく、目次のすべての行が Word.Paragraphs の個別の項目として表示されることがわかります。私はこれらを望んでいませんが、Paragraph オブジェクトでそれらを区別して無視できるプロパティを見つけることができませんでした (表のような他のフィールド タイプにも適用するためのソリューションが必要だと思います)。数字と典拠表、

4

3 に答える 3

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 に答える
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 の作成方法によっては、TOC の周囲にコンテンツ コントロールのような領域があり、追加の検出コードと削除コードを記述する必要がある場合があります。 .

于 2011-08-04T04:21:06.063 に答える
0

できることは、ドキュメントのセクションごとにカスタムスタイルを作成することです。

Word 2003のカスタムスタイル(使用しているWordのバージョンがわからない)

次に、段落コレクションを反復処理するときに、.Styleプロパティを確認し、TOCStyleと等しい場合は無視しても問題ありません。

同じテクニックがテーブルでもうまくいくと思います。

于 2011-07-10T02:21:25.883 に答える