テーブルの操作
テーブルの操作
テーブルは Aspose.Words の .NET 用 FOSS は次のものによって表されます Aspose.Words.Tables 名前空間: Table, Row、そして Cell は、段落と並んで文書ツリー内に位置する三層の複合ノード階層を形成します。このページでは、テーブルの作成について扱います DocumentBuilder、行とセルの書式設定、テーブル全体のレイアウト制御、セルの結合。
テーブルオブジェクトモデル
A Table は CompositeNode で、Row ノードを含み、各 Row は CompositeNode で、Cell ノードを含みます;Cell は段落と、場合によっては入れ子になったテーブルを含みます。Table.Rows は RowCollection を返し、Row.Cells は CellCollection を返し、Body または他の Story は、その Tables プロパティ(TableCollection)を通じて内部のすべてのトップレベルテーブルを公開します。これら3つのコレクションはすべて Add()、Insert()、Remove()、RemoveAt()、Contains()、および IndexOf() をサポートします。Table.EnsureMinimum()、Row.EnsureMinimum()、Cell.EnsureMinimum() はそれぞれ、その種類のノードが必要とする最小の有効コンテンツ(空の行、空のセル、または空の段落)を、プログラムによる編集で欠けた場合に埋めます。
DocumentBuilder を使用したテーブルの構築
DocumentBuilder.StartTable() はカーソル位置で新しいテーブルを開始し、InsertCell() は現在の行にセルを追加し、EndRow() は現在の行を閉じ、EndTable() はテーブルを閉じます。InsertCell() または EndRow() を呼び出す前に DocumentBuilder.CellFormat と DocumentBuilder.RowFormat を設定すると、作成時にセルと行にデフォルトの書式が適用されます――これらのプロパティは、ビルダーが次に挿入するコンテンツのテンプレートとして機能し、既に文書内にあるセルに対して遡及的に変更するものではありません。
セルと行の書式設定
Cell.CellFormat は CellFormat インスタンスです(Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth, LeftPadding, RightPadding, TopPadding, BottomPadding, HideMark, Orientation)。ClearFormatting() でリセットし、SetPaddings() で 4 つのセルのパディングを一度に設定できます。Row.RowFormat は RowFormat インスタンスです(Borders, Height, HeightRule, AllowBreakAcrossPages, HeadingFormat)で、独自の ClearFormatting() を持ちます。
テーブル全体の書式設定と AutoFit
Table 自体はレイアウトプロパティを公開します – Alignment(TableAlignment)、Bidi、LeftIndent、PreferredWidth、Style、StyleIdentifier、StyleName、StyleOptions(TableStyleOptions)、TextWrapping、および Title と Description を通じたアクセシビリティメタデータです。Table.AutoFit(AutoFitBehavior) は指定された動作に従ってテーブルとそのセルのサイズを変更します。SetBorder() は一つのボーダー側を設定し、SetBorders() はテーブル全体のすべてのボーダーを同じ線種、幅、色に設定します。ClearBorders() と ClearShading() はそれらをリセットします。ConvertToHorizontallyMergedCells() は幅が一致して結合されていたセルを、HorizontalMerge で明示的にフラグ付けされたセルに変換します。
推奨幅とセル幅
PreferredWidth は幅とその単位を表し、静的ファクトリメソッド PreferredWidth.FromPercent() または PreferredWidth.FromPoints() で作成されます;PreferredWidthType は特定の PreferredWidth が保持する値の種類(Auto、Percent、または Points)を識別します。Table.PreferredWidth と CellFormat.PreferredWidth の両方がこれらの値を受け入れます。
結合されたセル
CellFormat.HorizontalMerge と CellFormat.VerticalMerge(CellMerge)は、セルが隣接セルと水平または垂直に結合する際の参加方法を示します。CellVerticalAlignment は、結合状態に関係なく、セル内のコンテンツの垂直方向の配置方法を制御します。
ヒントとベストプラクティス
- 各行ごとに
StartTable()を対応するEndRow()で閉じ、最後にEndTable()を付けてください――未閉じの行やテーブルがあると、ビルダーの内部状態(および生成されたドキュメントツリー)が不正な状態になります。 - 同じテーブル内で行やセルごとに異なる書式が必要な場合は、各
InsertCell()またはEndRow()呼び出しの前にDocumentBuilder.CellFormatとDocumentBuilder.RowFormatを設定してください;ビルダーは挿入時点で設定されているものを適用します。 - コンテンツをプログラムで削除した後に
Table.EnsureMinimum()、Row.EnsureMinimum()、またはCell.EnsureMinimum()を呼び出し、ノードが Word が期待する最小限の有効構造を保持するようにしてください。 - 利用可能なページ幅に合わせてテーブルが自動調整されるようにする場合は
PreferredWidth.FromPercent()を使用し、固定レイアウト幅にする場合はPreferredWidth.FromPoints()を使用してください。 AutoFitBehaviorはTable.AutoFit()を呼び出したときに適用されます――コンテンツを追加・削除するたびに自動で再実行されるわけではないので、テーブルを再調整する必要がある場合は大幅な編集後に再度呼び出してください。
一般的な問題
| 問題 | 原因 | 修正 |
|---|---|---|
| テーブルが形式崩れしているか、保存時にエラーが発生します | 行またはテーブルが EndRow() / EndTable() で閉じられていませんでした | 常に StartTable() を最終的な EndTable() と組み合わせ、すべての行は EndRow() で閉じてください |
| 新しいセルは設定した書式を取得しません | CellFormat / RowFormat はセルが挿入された後、ビルダー上で変更されました | そのコンテンツに対して InsertCell() / EndRow() を呼び出す前に、DocumentBuilder.CellFormat / RowFormat を設定してください |
| テーブルは編集後、期待通りにサイズが変わりません | AutoFit() は呼び出された瞬間のテーブルの状態を反映し、継続的には反映しません | 構造の編集後に Table.AutoFit(AutoFitBehavior) を再度呼び出してください |
| 見た目が結合されている隣接セルは、実際には別々のセルとして扱われます | セルは幅だけで一致しており、CellMerge でフラグ付けされていませんでした | Table.ConvertToHorizontallyMergedCells() を呼び出すか、CellFormat.HorizontalMerge / VerticalMerge を明示的に設定してください |
FAQ
DocumentBuilder を使ってゼロからテーブルを作成するにはどうすればよいですか?
StartTable() を呼び出し、次に行の各セルに対して InsertCell() を実行し、行を閉じるには EndRow()、追加の行について同様に繰り返し、最後にテーブルを閉じるには EndTable() を使用します。
固定幅ではなく、パーセンテージベースのテーブル幅を設定するにはどうすればよいですか?
PreferredWidth.FromPoints(value) の代わりに Table.PreferredWidth = PreferredWidth.FromPercent(value) を割り当てます。
セルまたは行のすべての書式設定をリセットするにはどうすればよいですか?
セルの CellFormat に対して CellFormat.ClearFormatting() を呼び出すか、行の RowFormat に対して RowFormat.ClearFormatting() を呼び出します。
テーブル全体の枠線とシェーディングを一度に設定するにはどうすればよいですか?
すべての側に均一な枠線を設定するには Table.SetBorders() を使用し、1側ずつ設定するには Table.SetBorder()、均一なシェーディングには Table.SetShading() を使用します。ClearBorders() と ClearShading() でそれらをリセットします。
API Reference 概要
| クラス / 列挙型 | 説明 |
|---|---|
Table | テーブルノード; Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth |
Row | テーブル行ノード; Cells, RowFormat, EnsureMinimum() |
Cell | テーブルセルノード; CellFormat, EnsureMinimum() |
TableCollection / RowCollection / CellCollection | 型付きコレクションの Table / Row / Cell ノード |
CellFormat | セルごとの書式設定: 罫線、シェーディング、余白、結合状態、垂直配置 |
RowFormat | 行ごとの書式設定: 罫線、行の高さ、ページブレークの動作 |
PreferredWidth / PreferredWidthType | テーブルまたはセルの幅の値と単位(auto、percent、points) |
AutoFitBehavior | Table.AutoFit() がテーブルとセルのサイズを変更する方法 |
CellMerge / CellVerticalAlignment | 横方向/縦方向のセル結合状態と縦方向のコンテンツ配置 |
TableAlignment / TableStyleOptions / TextWrapping | テーブル全体の配置、スタイル適用、およびテキスト折り返しの動作 |
DocumentBuilder.StartTable / InsertCell / EndRow / EndTable | カーソルベースのテーブル作成 |