Word のインデックスとテーブルを .NET で操作する方法
Word のインデックスとテーブルを .NET で操作する方法
このガイドでは、Aspose.Words FOSS for .NET を使用して、Word 文書が独自の内容を要約するために使用するフィールド駆動の参照構造(目次、アルファベット順インデックス、権威目録)を挿入し構築する方法を示します。各構造は文書内の別の場所にあるマーカーフィールドからコンパイルされます:FieldToc は見出しベースおよび FieldTC マークされたエントリをコンパイルし、FieldIndex は FieldXE マーカーをコンパイルし、FieldToa は FieldTA 引用をコンパイルします。このファミリーのすべてのフィールドクラスは、Aspose.Words.Fields 名前空間の基底 Field 型から派生しています。
ステップバイステップガイド
ステップ 1: 目次を挿入する
TOC が表示される位置で DocumentBuilder.InsertTableOfContents(switches) を呼び出し、Word スタイルのフィールドスイッチ文字列(例: "\o \"1-3\" \h \z \u")を渡して、含める見出しレベルと結果の書式設定を制御します。これは、UI から目次を挿入したときに Word が使用するスイッチと同じです。これにより FieldToc が挿入され、同じ構造がプロパティとして直接公開されます:含めるアウトラインレベル用の HeadingLevelRange/EntryLevelRange、InsertHyperlinks、PreserveTabs/PreserveLineBreaks、および BookmarkName。目次ではなく図表目録を作成する場合は、同じ FieldToc に TableOfFiguresLabel または CaptionlessTableOfFiguresLabel を設定します。
ステップ 2: カスタム目次エントリをマークする
目次に含めるべきすべてのエントリが見出しスタイルから来るわけではありません。段落スタイルに依存しない目次エントリとしてマークするために、特定の場所にFieldTCを挿入します。FieldTC.Textはエントリテキスト、EntryLevelは表示すべきアウトラインレベル、OmitPageNumberはそのエントリのページ番号を抑制します。文書で複数の目次が必要な場合(例:メイン目次と別個の図表目次など)、FieldTC.TypeIdentifierを、収集すべきFieldTocのEntryIdentifierに合わせて設定します。
ステップ 3: マークされたエントリから索引を作成する
索引に含める各位置をFieldXEでマークし、Textにエントリテキストを設定します;EntryTypeはコロン区切り構文を使用してエントリをサブレベルにグループ化し、PageRangeBookmarkNameはブックマークをマークします。その範囲は単一ページ番号ではなく、索引内でページ範囲として扱われます。FieldIndexは文書内のすべてのFieldXEマーカーをアルファベット順の結果にコンパイルします — Headingを設定して文字見出しの区切り(A、B、C…)を挿入し、LetterRangeで索引をアルファベットの一部に制限し、RunSubentriesOnSameLineでサブエントリのレイアウトを制御します。PageNumberSeparator、PageRangeSeparator、SequenceSeparator、CrossReferenceSeparatorはエントリとページ参照の間の句読点を制御します。Word の組み込み索引ビジュアルスタイルは、FieldIndexFormat 列挙型(Template、Classic、Fancy、Modern、Bulleted、Formal、Simple)として利用可能です。
ステップ 4: 引用から権威一覧表を作成する
テキスト中の各引用をFieldTAでマークします:LongCitation と ShortCitation が引用テキストを保持し、EntryCategory は「判例」や「法令」などの見出しの下にグループ化します。IsBold/IsItalic は書式設定を制御します。FieldToa はそれらの引用を表にコンパイルします — EntryCategory がコンパイルするカテゴリを選択し、UseHeading がカテゴリ見出しの表示有無を制御し、UsePassim が多数回引用された資料に対して「passim」規則を適用し、PageRangeSeparator/PageNumberListSeparator/SequenceSeparator/EntrySeparator/RemoveEntryFormatting がレイアウトを制御します。
ステップ 5: 文書が変更された後にフィールドを更新する
目次、索引、または権威一覧表は、周囲のコンテンツが変更されても自動的に更新されません。特定のフィールドに対してUpdate()を呼び出します(例:FieldToc.Update())ことで結果を再計算し、ページ番号部分だけを更新する必要がある場合はFieldToc.UpdatePageNumbers()を使用します。文書内のすべてのフィールドを一括で更新するには、Document.UpdateFields()を呼び出してください。この版ではページレイアウトやページ割り付けが含まれないため、これらのフィールドの結果に表示されるページ番号はプレースホルダー値として評価されることに留意してください。
ステップ 6: 他の文書からエントリを含める
コンパイル時に別ファイルからエントリを取得する TOC、索引、または権威一覧を作成するには、FieldRD を挿入します。FieldRD.FileName は参照されるドキュメントの名前を指定し、IsPathRelative はそのパスが現在のドキュメントに対して相対的に解決されるかどうかを制御します。追加のドキュメントごとに FieldRD を1つずつ追加し、コンパイルフィールドをその後更新して、結合結果に参照されたコンテンツが含まれるようにします。
一般的な問題と対策
目次に期待される見出しが含まれていません。 目次のスイッチ文字列(または HeadingLevelRange)はこれらのアウトラインレベルを除外します。渡されるスイッチを調整してください InsertTableOfContents、または設定してください FieldToc.HeadingLevelRange 直接。
インデックスエントリが期待通りに表示されません。 対応する FieldXE マーカーが欠落しているか、その EntryType サブレベルの構文が一致していません FieldIndex 期待しています。 FieldXE マーカーが存在し、それらの EntryType 値が一貫してフォーマットされています。
コンテンツを編集した後、フィールド結果が古く見えます。 フィールドは編集後に更新されませんでした。呼び出す Update() 特定のフィールドに対して、または Document.UpdateFields() すべてのフィールドを一度にリフレッシュします。
別のドキュメントからのエントリは、コンパイル時に含まれません。 いいえ FieldRD そのドキュメントへの参照が存在するか、または IsPathRelative パスの解決方法と一致しません。追加してください FieldRD 正しい FileName and IsPathRelative 設定。
よくある質問
目次をプログラムで挿入するにはどうすればよいですか?
目次を表示させたい位置で、DocumentBuilder.InsertTableOfContents(switches) を Word スタイルのスイッチ文字列(例: "\o \"1-3\" \h \z \u")とともに呼び出します。
テキストを索引項目としてマークするにはどうすればよいですか?
その位置に FieldXE フィールドを挿入し、Text プロパティを項目テキストに設定します;FieldIndex は文書内のすべての FieldXE マーカーを集計して索引結果を作成します。
FieldTC と見出しベースの目次項目の違いは何ですか?
Word のデフォルトの目次動作は、見出しスタイルを使用した段落から項目を収集します。FieldTC は段落スタイルに依存せず任意の位置を目次項目としてマークし、FieldToc は一致する EntryIdentifier/TypeIdentifier 値によってそれを含めることができます。
文書が変更された後、目次または索引を更新するにはどうすればよいですか?
特定のフィールドに対して Update() を呼び出す(ページ番号のみの場合は FieldToc 上の UpdatePageNumbers() を使用)、または文書内のすべてのフィールドを更新するために Document.UpdateFields() を呼び出します。
複数のドキュメントにまたがって目次またはインデックスを作成できますか?
はい — FieldRD を挿入し、FileName を介して各追加ドキュメントを指し示します。コンパイルフィールド(FieldToc、FieldIndex、または FieldToa)は、更新されると参照されたドキュメントからエントリを含めます。