.NET でテーブルを操作する方法
このガイドでは、プログラムでテーブルを構築、フォーマット、読み取る方法を示します Aspose.Words FOSS for .NET、使用して Table, Row、および Cell クラスは Aspose.Words.Tables 名前空間と一緒に DocumentBuilder. それは、テーブルをゼロから構築すること、構築中にセルや行をフォーマットすること、テーブル全体のレイアウトと AutoFit を制御すること、希望の幅を設定すること、セルを結合すること、そしてロードされたドキュメント内に既に存在するテーブルを読み取ることをカバーします。
ステップバイステップガイド
ステップ1: パッケージをインストールする
Aspose.Words FOSS for .NET はまだ NuGet パッケージを公開していません – 代わりにソースからライブラリをビルドしてください。https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git をクローンし、.NET SDK を使用して Release 設定で Aspose.Words.sln をビルドし、生成された Aspose.Words アセンブリをプロジェクトから参照します。このライブラリは .NET Standard 2.0 をターゲットにしているため、.NET Framework 4.6.2 以上および .NET 6/8/10 で動作します。
ステップ2: 必要なクラスをインポートする
コアドキュメントクラス(Document、DocumentBuilder)のために using Aspose.Words; ディレクティブを追加し、このガイドで取り上げるテーブル固有クラスのために using Aspose.Words.Tables; ディレクティブを追加します – Table、Row、Cell、CellFormat、RowFormat、PreferredWidth、および関連する列挙型。
ステップ 3: DocumentBuilder を使用して新しいテーブルを作成する
Document とそれにバインドされた DocumentBuilder を作成し、次に DocumentBuilder.StartTable() を呼び出してカーソル位置でテーブルを開始します。行内の各セルについては DocumentBuilder.InsertCell() を呼び出し、DocumentBuilder.EndRow() で行を閉じます。テーブルが必要とする行数だけ繰り返し、全体のテーブルは DocumentBuilder.EndTable() で閉じます。すべての StartTable() には対応する EndTable() が必要であり、すべての行には対応する EndRow() が必要です。そうしないと、ビルダーの内部状態と生成されたドキュメントツリーが不正な構造になります。
ステップ 4: ビルドしながらセルと行をフォーマットする
ビルダーが作成しようとしているセルや行にフォーマットを適用するには、InsertCell() または EndRow() を呼び出す前に DocumentBuilder.CellFormat と DocumentBuilder.RowFormat を設定します――これら 2 つのプロパティは新しいコンテンツのテンプレートとして機能し、すでに挿入されたセルに遡って変更を加えるものではありません。CellFormat は Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth と、4 つのパディングプロパティ(LeftPadding, RightPadding, TopPadding, BottomPadding)を公開し、これらはすべて SetPaddings() で一括設定できます。RowFormat は Borders, Height, HeightRule, AllowBreakAcrossPages, HeadingFormat を公開します。次の行またはセルの新しい値を設定する前に、CellFormat.ClearFormatting() または RowFormat.ClearFormatting() を呼び出してそれぞれをデフォルトにリセットしてください。
ステップ 5: テーブル全体のレイアウトと AutoFit を設定する
テーブルが作成されたら、Table オブジェクトに対してレイアウトプロパティを直接設定します: Alignment(TableAlignment)、Bidi、LeftIndent、PreferredWidth、Style、StyleIdentifier、StyleName、StyleOptions(TableStyleOptions)、および TextWrapping。Table.SetBorders() を呼び出すと、テーブル全体に同一のボーダースタイル、幅、色を適用できます。あるいは Table.SetBorder() で単一側だけを設定し、ClearBorders() と ClearShading() でそれらをリセットします。Table.AutoFit(AutoFitBehavior) は選択された動作に従ってテーブルとセルのサイズを変更します――構造的な編集を行った後は再度呼び出してください。このメソッドは実行時点のテーブル状態のみを反映し、継続的に適用されるわけではありません。
ステップ 6: 推奨幅とセル幅を設定する
利用可能なページ幅に合わせてレイアウトが適応する幅を作成するには静的ファクトリメソッド PreferredWidth.FromPercent() を、固定幅の場合は PreferredWidth.FromPoints() を使用します。PreferredWidthType は、特定の PreferredWidth が保持している値の種類(Auto、Percent、または Points)を報告します。結果はテーブル全体の場合は Table.PreferredWidth に、単一セルの場合は CellFormat.PreferredWidth に割り当てます。
ステップ 7: セルの結合
セルを結合されたものとしてマークするには、結合に参加させるセルに CellFormat.HorizontalMerge または CellFormat.VerticalMerge(どちらも CellMerge と入力)を設定します。セルの幅を合わせるだけで見た目上結合された場合は、明示的にフラグが付いていないため、Table.ConvertToHorizontallyMergedCells() を呼び出してその視覚的配置を実際の CellMerge 状態のセルに変換します。CellVerticalAlignment は、結合の有無に関わらず、セル内のコンテンツの垂直方向の配置方法を制御します。
ステップ 8: 既存ドキュメントからテーブルを読み取る
ロード済みのドキュメントに既に存在するテーブルを操作するには、新規に作成する代わりに Body.Tables(または他の任意の Story 上の Tables プロパティ)— TableCollection — を読み取ります。Table.Rows は RowCollection を返し、Row.Cells は CellCollection を返します;これら 3 つのコレクション型はすべて、プログラムによる編集のために Add()、Insert()、Remove()、RemoveAt()、Contains()、および IndexOf() をサポートします。行やセルを削除した後は、Table.EnsureMinimum()、Row.EnsureMinimum()、または Cell.EnsureMinimum() を呼び出して、ノードが Word が期待する最小の有効構造(空の行、空のセル、または空の段落)を保つようにします。
一般的な問題と対策
保存されたドキュメントが不正な形式に見える、または保存中にエラーが発生します 行またはテーブル自体が閉じられていませんでした。常にペアにしてください DocumentBuilder.StartTable() 最終的なものと EndTable()、そしてすべての行を EndRow() 次の行に移るかテーブルを終了する前に.
新しいセルは設定した書式を引き継ぎません CellFormat and RowFormat は次の上で変更されました DocumentBuilder 影響を受けたセルがすでに挿入された後です。設定 DocumentBuilder.CellFormat / RowFormat の前に InsertCell() or EndRow() フォーマットしたいコンテンツを生成する呼び出し。
テーブルはコンテンツを編集した後、期待した通りにサイズ変更されません Table.AutoFit(AutoFitBehavior) 呼び出された時点のテーブル構造のみを反映します。行・セル・コンテンツの追加や削除など構造を変更した後、レイアウトを再調整する必要がある場合は、再度呼び出してください。
結合されているように見えるセルは、読み戻すと個別のセルとして扱われます セルは幅だけで一致しており、フラグ付けされていませんでした CellMerge. 呼び出し Table.ConvertToHorizontallyMergedCells(), または設定 CellFormat.HorizontalMerge / VerticalMerge 結合すべきセルに明示的に設定してください。
行やセルを削除すると、テーブルは無効な状態になります Word はすべての Table, Row、および Cell 最小限の有効な構造を維持するために。プログラムでコンテンツを削除した後、次を呼び出します EnsureMinimum() 直前に変更されたノードに対して。
よくある質問
既存のテーブルを編集するのではなく、ゼロからテーブルを作成するにはどうすればよいですか?
DocumentBuilder を使用します: StartTable() を呼び出し、行内の各セルに対して InsertCell() を実行し、行を閉じるには EndRow()、追加の行が必要な場合は繰り返し、テーブルを閉じるには EndTable() を使用してください。
ロード済みのドキュメントに既に存在するテーブルを取得するにはどうすればよいですか?
対象のセクションの Body 上にある Tables プロパティ(TableCollection)を読み取るか、ヘッダーやフッターなどの他の Story 上でも同様に取得してください。
テーブルの幅を固定幅ではなく、ページ幅のパーセンテージで設定するにはどうすればよいですか?
Table.PreferredWidth = PreferredWidth.FromPercent(value) を割り当て、PreferredWidth.FromPoints(value) ではなく。
SetBorders と SetBorder で枠線を設定する場合の違いは何ですか?
Table.SetBorders() はテーブル内のすべての枠線に対して、1つの線種、幅、色を一括で適用します。Table.SetBorder() は個別の側面を設定し、側面ごとに異なる書式を付けることができます。
セルまたは行を再利用する前に、書式設定をリセットするにはどうすればよいですか?
セルの CellFormat に対して CellFormat.ClearFormatting() を呼び出すか、行の RowFormat に対して RowFormat.ClearFormatting() を呼び出します。