インデックスとテーブル フィールドの操作
インデックスとテーブル フィールドの操作
このガイドでは、Word の「インデックスとテーブル」フィールド ファミリー(目次、索引、図表目次、権威目次の背後にあるフィールド)の使い方を示します。これらはすべて Field のサブクラスで、Aspose.Words.Fields 名前空間に属します: FieldToc(目次または図表)、FieldIndex(索引)、FieldXE(索引エントリ)、FieldToa(権威目次)、FieldTA(権威目次エントリ、または引用)、FieldTC(目次エントリ)、および FieldRD(複数ファイルにまたがる結合索引または目次を作成するための参照ドキュメント)。
フィールド基底クラス
このファミリーのすべてのフィールド クラスは Field から継承され、Start、Separator、End(ラン ストリーム内でフィールドを囲む FieldStart、FieldSeparator、FieldEnd ノード)を公開します。Type(FieldType の値 — このファミリーの FieldTOC、FieldIndex、FieldTOA、FieldTOCEntry、FieldIndexEntry、FieldTOAEntry、または FieldRefDoc)、Result/DisplayResult(フィールドの現在計算されたテキスト)、IsLocked と IsDirty、およびメソッド GetFieldCode()、Update()、Unlink()、Remove() を提供します。Update() はフィールドの結果を再計算します。目次の場合、これはドキュメントの見出しや FieldTC マーカーからエントリ リストを再構築することを意味します。
目次の挿入
DocumentBuilder.InsertTableOfContents(switches) はビルダーの現在位置に FieldToc を挿入し、Word フィールド スイッチ文字列(例: "\o \"1-3\" \h \z \u")を使用して、含める見出しレベルと結果の書式を制御します—これは UI から目次を挿入したときに Word が自動的に生成するスイッチと同じです。挿入後、FieldToc.UpdatePageNumbers() は既存エントリのページ番号部分を再計算します。FieldToc はまた、目次の構造を直接制御するプロパティを公開します: HeadingLevelRange と EntryLevelRange(どのアウトラインレベルを含めるか)、EntryIdentifier(異なる FieldTC マーカーから複数の目次を構築するために目次が収集すべき TC フィールド識別子)、InsertHyperlinks、PreserveTabs/PreserveLineBreaks、EntrySeparator/SequenceSeparator、BookmarkName、そして—目次ではなく図表目次の場合—TableOfFiguresLabel と CaptionlessTableOfFiguresLabel。
カスタム目次エントリのマーク付け
すべての目次エントリが見出しスタイルから来るわけではありません。FieldTCは段落スタイルに依存せず、特定の位置を目次エントリとしてマークします:FieldTC.Textがエントリテキスト、EntryLevelが表示すべきアウトラインレベル、TypeIdentifierは複数の目次を作成する際にFieldToc.EntryIdentifierにリンクし、OmitPageNumberはそのエントリのページ番号を抑制します。
インデックスの作成
FieldIndexはINDEXフィールドを実装し、文書のFieldXE(インデックスエントリ)マーカーをアルファベット順のインデックスにまとめます。FieldXE.Textはエントリテキスト、EntryTypeはコロン区切り構文を使用してエントリをサブレベルにグループ化し、PageRangeBookmarkNameはブックマークをマークし、その範囲がインデックス内で単一ページ番号ではなくページ範囲となります。また、IsBold/IsItalicは結果として得られるページ参照の書式を指定します。一方、FieldIndexでは、Headingが文字見出しの区切り(A、B、C…)を挿入し、LetterRangeがインデックスをアルファベットの一部に限定し、RunSubentriesOnSameLineがサブエントリのレイアウトを制御し、PageNumberSeparator/PageRangeSeparator/SequenceSeparator/CrossReferenceSeparatorがエントリとページ参照の間の句読点を制御します。FieldIndexFormatはWordに組み込まれているインデックスのビジュアルスタイルを個別に列挙します(Template、Classic、Fancy、Modern、Bulleted、Formal、Simple)。
権威目録
FieldToaとFieldTAは、FieldIndex/FieldXEに相当する権威です:FieldTAは本文中の引用をマークします(LongCitationとShortCitationテキスト、EntryCategoryは「判例」や「法令」などの見出しの下にグループ化し、IsBold/IsItalicは書式設定のため)、FieldToaはそれらの引用を表にまとめます。EntryCategoryはどのカテゴリをまとめるかを選択し、UseHeadingとUsePassimはカテゴリ見出しと多数回引用された資料の「passim」表記を制御し、PageRangeSeparator/PageNumberListSeparator/SequenceSeparator/EntrySeparator/RemoveEntryFormattingはレイアウトを制御します。
他の文書からコンテンツを参照する
FieldRDはRDフィールドを実装し、目次、インデックス、または権威目録フィールドにコンパイル時に別ファイルからエントリを含めるよう指示します — FieldRD.FileNameは参照される文書を示し、IsPathRelativeはそのパスが現在の文書に対して相対的に解決されるかどうかを制御します。
ヒントとベストプラクティス
- TOC のスイッチ文字列を Word が行う方法(
\o "1-3" \h \z \u)で作成し、各FieldTocプロパティを個別に設定するのではなく、後で変更が必要な特定のプロパティだけを調整します。 - コンテンツが変更された後に
FieldToc.UpdatePageNumbers()(またはField.Update())を呼び出し、TOC、索引、または権威目録が挿入時の古い結果ではなく、現在の文書を反映するようにします。 - 文書が複数の TOC(例:メイン TOC と別個の図目次)を必要とし、異なるエントリセットから構築する場合は、
FieldTC.TypeIdentifierとFieldToc.EntryIdentifierを組み合わせて使用します。 - エントリテキスト内でページ範囲を手動で書式設定する代わりに、
FieldXE.PageRangeBookmarkName(またはFieldTAの同等の範囲マーク)を設定し、コンテンツが移動しても索引/表が一貫性を保つようにします。 - この版の INDEX/TOC/TOA 結果におけるページ番号は、ページレイアウトやページ付けがこの版に含まれていないため、実際のページ番号ではなくプレースホルダー値として評価されることに留意してください。
一般的な問題
| 問題 | 原因 | 修正 |
|---|---|---|
| 目次に期待される見出しが含まれていません | 目次のスイッチ文字列(または HeadingLevelRange)がそれらのアウトラインレベルを除外しています | InsertTableOfContents に渡すスイッチを調整するか、FieldToc.HeadingLevelRange を設定してください |
| インデックス項目が期待される場所に表示されません | 対応する FieldXE マーカーが欠落しているか、EntryType のサブレベル構文が FieldIndex の期待するものと一致していません | FieldXE マーカーが存在し、EntryType の値が一貫した形式であることを確認してください |
| コンテンツを編集した後、フィールド結果が古く見える | 編集後にフィールドが更新されませんでした | フィールドに対して Update() を呼び出す(または Document に対して UpdateFields() を呼び出す) |
| 別のドキュメントからのエントリがコンパイル時に含まれていません | そのドキュメントを参照する FieldRD が存在しないか、IsPathRelative がパスの解決方法と一致していません | 正しい FileName と IsPathRelative 設定を持つ FieldRD を追加してください |
FAQ
目次をプログラムで挿入するにはどうすればよいですか?
目次を表示させたい位置で、DocumentBuilder.InsertTableOfContents(switches) を Word 形式のスイッチ文字列(例: "\o \"1-3\" \h \z \u")とともに呼び出します。
テキストを索引項目としてマークするにはどうすればよいですか?
その位置に FieldXE フィールドを挿入します(例: DocumentBuilder.InsertField を使用)。そのフィールドの Text プロパティに項目テキストを設定します;FieldIndex は文書内のすべての FieldXE マーカーを集めて索引結果を生成します。
FieldTC と見出しベースの目次エントリの違いは何ですか?
Word の既定の目次動作は、見出しスタイルを使用した段落からエントリを収集します。FieldTC を使用すると、段落スタイルに依存せず任意の位置を目次エントリとしてマークできます。これらは FieldToc が EntryIdentifier/TypeIdentifier の値が一致することで取り込むことができます。
文書を変更した後、目次や索引を更新するにはどうすればよいですか?
特定のフィールドに対して Update() を呼び出します(例: FieldToc.Update()、ページ番号だけの場合は FieldToc.UpdatePageNumbers())。または、文書内のすべてのフィールドを更新するために Document.UpdateFields() を使用します。
複数の文書にまたがって目次や索引を作成できますか?
はい — FieldRD フィールドを挿入し、FileName を介して各追加ドキュメントを指す;コンパイル フィールド(FieldToc、FieldIndex、または FieldToa)は、更新時に参照ドキュメントからのエントリを含みます。
API Reference 概要
| クラス/メソッド | 説明 |
|---|---|
Field | すべてのフィールドタイプの基底クラスで、Start/Separator/End、Type、Update() を含みます |
DocumentBuilder.InsertTableOfContents(switches) | Word スタイルの TOC スイッチを使用して FieldToc を挿入します |
FieldToc | 目次フィールド(目次または図表目次)を実装します |
FieldTC | 特定の場所にカスタム目次エントリをマークします |
FieldIndex | INDEXフィールドを実装し、FieldXEマーカーをコンパイルします |
FieldXE | 場所をインデックスエントリとしてマークします |
FieldToa | table-of-authoritiesフィールドを実装し、FieldTAマーカーをコンパイルします |
FieldTA | 権威目録の引用をマークします |
FieldRD | TOC、索引、または権威目録を作成する際に、別の文書のコンテンツを参照します |
FieldIndexFormat | Word の組み込みインデックス視覚スタイルの列挙型 |