.NETでリストを扱う方法

.NETでリストを扱う方法

.NETでリストを操作する方法

Word 文書の番号付きリストと箇条書きリストは、3 つの協働オブジェクトから構成されています: List(再利用可能な番号定義); ListFormat(特定の段落がどのリストとレベルに属するかを示す); および ListLevel(1 レベル分の実際の書式設定を保持)。このガイドでは、段落にリストを適用する方法、別々のリストがカウンタを共有しないようにする方法、段落をレベル間で移動する方法、そして Aspose.Words FOSS for .NET を使用して番号付けと箇条書きの書式設定をカスタマイズする方法を示します。


ステップバイステップガイド

ステップ 1: 段落にリストを適用する

段落の書式設定に ListFormat.ApplyBulletDefault() または ApplyNumberDefault() を使用すると、Word のデフォルトの箇条書きまたは番号付きリストをワンコールで適用できます — これが標準リストを適用する最も迅速な方法です。デフォルトではなく特定の事前定義フォーマットを使用する場合は、Document.Lists(ListCollection).Add(listTemplate) を呼び出し、ListTemplate 値として BulletDisk、BulletSquare、NumberArabicDot、または NumberUppercaseRomanDot を指定して、Word の組み込みフォーマットのいずれかから List を作成するか、単一レベルのバリアントとして AddSingleLevelList(listTemplate) を使用します。段落にリスト書式が設定されると、ListFormat.IsListItem は true を報告し、ListFormat.List/ListLevelNumber が使用しているリストとレベルを特定します。


ステップ 2: 新しい段落グループに独立した番号付けを設定する

段落の ListFormat.List が同じ共有 List オブジェクトを指している場合、同じカウンタが継続されます。新しい段落グループで番号付けを 1 から独立して再開する必要がある場合は、ListCollection.AddCopy(srcList) を呼び出して既存のリスト定義を複製し、元のリストを再利用する代わりにそのコピーを新しい段落に適用します。ListCollection.GetListByListId(listId) は、ListId によって特定のリストを取得します(作成せずに検索したいとき)。Count は、現在のドキュメントに存在するリストの数を報告します。


ステップ 3: リスト レベル間で段落を移動する

段落をリスト内で 1 レベル深く移動するには ListFormat.ListIndent() を使用し、1 レベル浅く移動するには ListOutdent() を使用します — これは、リスト段落の先頭で Word が Tab と Shift+Tab に対して行う操作と同じです。ListLevelNumber を直接設定するよりもこれらの方法を優先してください。これにより段落のリスト書式が内部的に一貫した状態に保たれます。段落からリスト書式を完全に除去するには RemoveNumbers() を呼び出します。


ステップ 4: リスト レベルの番号書式をカスタマイズする

List.ListLevels(ListLevelCollection)で特定のレベルに到達し、次に ListLevel.NumberStyle(NumberStyle の値で、たとえば Arabic、UppercaseRoman、LowercaseLetter、または Bullet)と NumberFormat を設定します — これは番号と句点や括弧などのリテラル文字列を組み合わせた書式文字列です — これらは一緒に設定する必要があり、ペアが一致しないと予期しない描画が発生します。StartAt はレベルの開始番号を設定し、RestartAfterLevel はどの上位レベルのインクリメントがこのレベルのカウンタを再起動するかを制御します — デフォルトの再起動動作に頼らず、入れ子リストでは明示的に設定してください。Alignment(Left、Center、Right)と TrailingCharacter(Tab、Space、Nothing)はラベルの位置とラベルと段落テキスト間の区切り文字を制御し、TabPosition、NumberPosition、TextPosition は正確なレイアウトのために使用します。IsLegal は NumberStyle に関係なく、常にアラビア数字の法的スタイル番号付けを強制します。


ステップ 5: リスト レベルに画像バレットを追加する

対象レベルで ListLevel.CreatePictureBullet() を呼び出して画像バレット定義を作成し、次にバレットの ImageData を指定します。その後、同じレベルに既存のテキストバレット書式があれば削除します。画像バレットを削除してテキストベースのバレット書式に戻すには DeletePictureBullet() を呼び出します。


ステップ 6: リスト項目のレンダリング済みラベルを検査する

ListLabel は、アイテムの段落書式設定から取得される、リスト項目インスタンスに実際に描画されるラベルを表します。LabelString は Word が表示するリテラルテキストで、例えば「3.」や「•」です。LabelValue は基礎となる数値で、Font は段落テキストの書式設定とは独立したラベル自身の書式設定です。リスト全体を描画せずにシーケンス内の任意の位置でラベルの値を計算するには、ListLevel.GetEffectiveValue(index, numberStyle, customNumberStyleFormat) を呼び出してください。


一般的な問題と対策

独立して番号付けされるべき2つの段落が、同じシーケンスを継続しています。 両方の段落の ListFormat.List 同じ共有の List オブジェクト。第2グループに独自のリストを付与するには ListCollection.AddCopy(srcList) 同じものを再利用する代わりに List.

カスタム番号付けフォーマット文字列が期待通りにレンダリングされません。 ListLevel.NumberFormat レベルの期待されるパターンに一致しません NumberStyle。検証してください NumberFormat and NumberStyle は、編集中のレベルに対して一貫して設定されます。

レベルをプログラムで変更した後、リストのインデントが崩って見えます。 ListLevelNumber は、関連する位置プロパティを更新せずに直接設定されました。使用してください ListFormat.ListIndent()/ListOutdent() 設定する代わりに ListLevelNumber 直接に。

レベルに画像バレットが表示されません。 そのレベルに画像バレットが作成されていないか、デフォルトのテキストバレット書式がまだ有効です。呼び出してください ListLevel.CreatePictureBullet() テキストバレット書式を削除する前に、画像データを提供してください。

スタイルリンクされたリストは、直接の書式設定変更に応答しません。 Check List.IsListStyleReference — スタイル参照リストの書式は、リンクされたものによって制御されます Style (経由で List.Style), 直接リストを編集しても変更されません。比較対象は IsListStyleDefinition 独自の書式を定義するリストと区別するために。


よくある質問

「List」と「ListFormat」の違いは何ですか?

List は段落全体で共有される再利用可能な番号付けまたは箇条書きの定義です。ListFormat は段落ごとに設定され、特定の段落が使用する List とそのレベルを、ListFormat.List と ListLevelNumber を通じて指し示します。

段落が既にリストの一部かどうかを確認するにはどうすればよいですか?

段落の書式設定に関する ListFormat.IsListItem を参照してください。true の場合、ListFormat.List と ListLevelNumber が、それが属するリストとレベルを特定します。

既存のリストとは独立して、新しいリストを 1 から番号付けさせるにはどうすればよいですか?

ListCollection.AddCopy(srcList) を使用してリスト定義の独立したコピーを作成し、そのコピーを新しい段落に適用してください。元の List を再利用すると同じカウンタが継続されてしまいます。

最初から箇条書きまたは番号付きリストを作成するにはどうすればよいですか?

Word のデフォルト書式設定には ListFormat.ApplyBulletDefault() または ApplyNumberDefault() を使用し、または ListCollection.Add(listTemplate) に ListTemplate 値を指定して、事前定義された書式から開始し、結果として得られる List.ListLevels をカスタマイズします。

「1.」の代わりに「1)」のような番号書式を取得するにはどうすればよいですか?

関連するレベルで ListLevel.NumberFormat を目的の書式文字列に設定し、数値スタイル自体のために NumberStyle も併せて設定します。


参照

 日本語