テキストの操作
テキストの操作
Word 文書のテキストは、同じフォント書式を共有する連続した文字からなる Run ノードに編成され、Paragraph ノード内にグループ化されます。Aspose.Words .NET 用の FOSS は、文字書式用の Font、段落レベル書式用の ParagraphFormat、およびツリーの任意の部分でテキストを読み取ったり置換したりするための Range と共に、これらを直接公開します。本ガイドでは、ランとフォント、段落書式、テキストの読み取りと置換、コメント、および段落レベルのリスト書式について説明します。
ランと文字書式
A Run は、同一の書式セットを共有するテキストの範囲を表します。その Text プロパティはプレーンテキストの内容を保持し、Font プロパティ(Font オブジェクト)は文字レベルの書式 — Name、Size、Bold、Italic、Underline、Color、HighlightColor、Subscript/Superscript、StrikeThrough など多数を保持します。Font.ClearFormatting() はランのフォントをデフォルトにリセットします。段落のランは、その Runs プロパティ(RunCollection)を通じて取得できます。
段落と段落書式
Paragraph は、1つの段落のラン(および他のインラインコンテンツ)を含む複合ノードです。文書や本文の段落は、ParagraphCollection(Body.Paragraphs)として公開されます。Paragraph.ParagraphFormat(ParagraphFormat オブジェクト)は段落レベルのレイアウトを制御し、Alignment、インデント(LeftIndent、RightIndent、FirstLineIndent)、間隔(SpaceBefore、SpaceAfter、LineSpacing、LineSpacingRule)、およびページネーション動作(KeepTogether、KeepWithNext、PageBreakBefore、WidowControl)を管理します。ParagraphFormat.ClearFormatting() はこれらをデフォルトにリセットし、Paragraph.JoinRunsWithSameFormatting() は同一書式を持つ隣接するランを結合します。
Range を使用したテキストの読み取りと置換
コンテンツを含むすべてのノード — Document、Section、Paragraph、または Run — は Range を公開します。Range.Text はその範囲内のすべてのプレーンテキストを返し、Range.Replace(pattern, replacement) はその範囲だけに限定した検索置換を実行します。たとえば、文書全体に影響を与えずに特定の段落内のテキストだけを置き換えることができます。Range.Delete() は範囲のコンテンツを完全に削除します。
Comments
テキスト内の位置にコメントを固定する Comment ノードです;new Comment(doc, author, initial, dateTime) で作成し、SetText(text) で本文テキストを設定し、他のノードと同様に文書に挿入します。Comment.AddReply(author, initial, dateTime, text) はスレッド化された返信を付加し、RemoveReply(reply) / RemoveAllReplies() はそれらを削除します。文書のコメントは CommentCollection に集められます。
段落レベルでのリスト書式設定
Paragraph.ListFormat(ListFormat オブジェクト)は、段落がリストの一部かどうかを報告・制御します:IsListItem と ListLevelNumber は現在の状態を報告し、ApplyBulletDefault() と ApplyNumberDefault() は段落をデフォルトの箇条書きまたは番号付きリスト項目に変換し、ListIndent() / ListOutdent() はリストのネストレベルを変更し、RemoveNumbers() は通常の段落に戻します。
ヒントとベストプラクティス
- ビルダーでテキストを書き込む前に
DocumentBuilder.Fontのフォントプロパティを設定し、テキストを書いた後に個々のRunオブジェクトを再フォーマットするのを避けます。 Range.Replaceの対象範囲は、実際に変更したい部分をカバーする最小の範囲に限定してください — 変更を文書全体に適用すべきでない場合は、文書全体ではなくParagraphまたはSectionの範囲で呼び出します。- プログラム的な編集を一連行った後に
Paragraph.JoinRunsWithSameFormatting()を呼び出し、不要に断片化されたラン構造を回避します。 - 組み込みのデフォルトで十分な場合、リスト定義を手動で作成する代わりに、
ListFormat.ApplyBulletDefault()/ApplyNumberDefault()を使用して簡易デフォルトリストを取得します。 Comment.AddReplyの結果をCommentノードそのものとして読み取ります — 返信はプレーン文字列ではなく、完全なコメントオブジェクトです。
よくある問題
| 問題 | 原因 | 修正 |
|---|---|---|
Run の Font をフォーマットしても、隣接するテキストの見た目は変わらない | 隣接するテキストは別の Run にあり、独自の Font インスタンスを持っている | 影響を受けるすべての Run を特定してフォーマットするか、書き込む前に DocumentBuilder.Font でフォーマットを設定する |
Range.Replace が意図した領域外のテキストを変更する | より狭いノードの範囲ではなく、Document.Range に対して Replace が呼び出された | 特定のParagraph、Section、または他のノードのRangeに対してReplaceを呼び出す |
段落はリスト項目のように見えますが、IsListItemは false です | 箇条書き/番号は手動テキストであり、実際のリスト書式ではありません | 入力された文字の代わりに、ListFormat.ApplyBulletDefault()またはApplyNumberDefault()を使用して実際のリスト書式を適用する |
ドキュメントには予想よりもはるかに多くのRunノードがあります | 繰り返しの小さな編集により、run が分割され、再結合されません | 編集のバッチの後に Paragraph.JoinRunsWithSameFormatting() を呼び出す |
FAQ
Run と Paragraph の違いは何ですか?
Run は、同一の文字書式セット(Font)を共有するテキストのスパンです。Paragraph は、1つ以上のラン(および他のインラインコンテンツ)と段落レベルの書式(ParagraphFormat)を含む複合ノードです。
ドキュメントまたはセクション内のすべてのテキストを読むにはどうすればよいですか?
そのノードのRangeのTextプロパティを読み取ります — 例えば、document.Range.Textまたはsection.Range.Textです。
1つの段落だけでテキストを検索して置換するにはどうすればよいですか?
そのParagraphのRangeに対してReplace(pattern, replacement)を呼び出し、Document.Rangeでは呼び出さないでください。
ドキュメントにコメントを追加するにはどうすればよいですか?
それをnew Comment(doc, author, initial, dateTime)で作成し、テキストはSetText(text)で設定し、ツリーに挿入します; Comment.AddReply(author, initial, dateTime, text)でそれに返信します。
段落を箇条書きリスト項目に変換するにはどうすればよいですか?
その段落のListFormatに対してApplyBulletDefault()を呼び出します; 番号付きリストには代わりにApplyNumberDefault()を使用してください。
API Reference の概要
| クラス/メソッド | 説明 |
|---|---|
Run | 文字書式が同一セットで共有されているテキストのスパン。 |
Font | 文字レベルの書式 — フォント名、サイズ、太字、斜体、色など。 |
Paragraph | 1つの段落のランと書式を含む複合ノード。 |
ParagraphFormat | 段落レベルの書式 — 配置、インデント、行間、ページ割り付け。 |
ParagraphCollection | Paragraph ノードの型付きコレクション、例: Body.Paragraphs。 |
Range | 文書の連続領域; Text、Replace、および Delete をサポートします。 |
Comment | テキスト内の位置に固定されたスレッドコメント。 |
CommentCollection | ドキュメントのコメントコレクション。 |
ListFormat | 段落がリストに参加するかどうか、またその方法を制御します。 |