PartialGrid
概要
PartialGrid(部分グリッド)は、ReoGridワークシートの一部分のデータ、スタイル、および境界線を含む独立したオブジェクトです。これは、ワークシートの特定の範囲をコピー、移動、複製する際に使用されます。
基本概念
PartialGridは以下の情報を保持できます:
- セルデータ - 値、テキスト、数値などのセル内容
- セルスタイル - フォント、色、背景色、配置などの書式設定
- 数式 - セルに含まれる計算式
- データフォーマット - 数値や日付の表示形式
- 境界線 - セルの境界線スタイル(水平線・垂直線)
作成方法
1. 空のPartialGridを作成
// 空のPartialGridを作成
var partialGrid = new PartialGrid();
// 指定サイズでPartialGridを作成
var partialGrid = new PartialGrid(5, 3); // 5行3列
// データ配列からPartialGridを作成
var data = new object[,] {
{"A1", "B1", "C1"},
{"A2", "B2", "C2"},
{"A3", "B3", "C3"}
};
var partialGrid = new PartialGrid(data);
2. ワークシートからPartialGridを取得
// 範囲指定でPartialGridを取得
var partialGrid = worksheet.GetPartialGrid("A1:C3");
// RangePositionで指定
var range = new RangePosition(0, 0, 3, 3); // 0行0列から3行3列
var partialGrid = worksheet.GetPartialGrid(range);
// 行列番号で指定
var partialGrid = worksheet.GetPartialGrid(0, 0, 3, 3); // 開始行、開始列、行数、列数
// 特定の行と列の組み合わせで取得
int[] columns = {0, 2, 4}; // A列、C列、E列
int[] rows = {0, 1, 3}; // 1行目、2行目、4行目
var partialGrid = worksheet.GetPartialGrid(columns, rows);
使用方法
1. PartialGridをワークシートに設定
// 基本的な設定
worksheet.SetPartialGrid("E1:G3", partialGrid);
// RangePositionで指定
var targetRange = new RangePosition(4, 0, 3, 3);
worksheet.SetPartialGrid(targetRange, partialGrid);
// 繰り返し設定(パターンを繰り返して大きな範囲に適用)
worksheet.SetPartialGridRepeatly("A1:H10", partialGrid);
2. コピーフラグの使用
PartialGridCopyFlag
を使用して、コピーする内容を細かく制御できます:
// すべてをコピー(デフォルト)
var partialGrid = worksheet.GetPartialGrid("A1:C3", PartialGridCopyFlag.All);
// データのみコピー
var partialGrid = worksheet.GetPartialGrid("A1:C3", PartialGridCopyFlag.CellData);
// スタイルのみコピー
var partialGrid = worksheet.GetPartialGrid("A1:C3", PartialGridCopyFlag.CellStyle);
// 境界線のみコピー
var partialGrid = worksheet.GetPartialGrid("A1:C3", PartialGridCopyFlag.Borders);
// 複数の要素を組み合わせ
var partialGrid = worksheet.GetPartialGrid("A1:C3",
PartialGridCopyFlag.CellData | PartialGridCopyFlag.CellStyle);
// PartialGridを設定する際にもフラグを指定可能
worksheet.SetPartialGrid("E1:G3", partialGrid, PartialGridCopyFlag.CellData);
主要なコピーフラグ
フラグ | 説明 |
---|---|
All | すべての要素をコピー |
CellProperties | セルのプロパティ(データ、数式、フォーマット、スタイル) |
CellData | セルデータのみ |
CellFormula | 数式のみ |
CellFormat | データフォーマットのみ |
CellStyle | セルスタイルのみ |
Borders | すべての境界線 |
HBorder | 水平境界線のみ |
VBorder | 垂直境界線のみ |
実用例
例1: データのコピーと貼り付け
// ワークシートにデータを設定
worksheet["A1"] = "商品名";
worksheet["B1"] = "価格";
worksheet["C1"] = "数量";
worksheet["A2"] = "商品A";
worksheet["B2"] = 1000;
worksheet["C2"] = 5;
worksheet["A3"] = "商品B";
worksheet["B3"] = 2000;
worksheet["C3"] = 3;
// ヘッダー行を含む範囲をPartialGridとして取得
var headerAndData = worksheet.GetPartialGrid("A1:C3");
// 別の場所に貼り付け
worksheet.SetPartialGrid("E1:G3", headerAndData);
例2: テンプレートの繰り返し適用
// 小さなテンプレートを作成
var template = new PartialGrid(new object[,] {
{"項目", "値"},
{"", ""}
});
// テンプレートを大きな範囲に繰り返し適用
worksheet.SetPartialGridRepeatly("A1:H10", template);
例3: スタイルのコピー
// 元の範囲にスタイルを設定
worksheet.SetRangeStyle("A1:C2", new WorksheetRangeStyle {
BackColor = Color.LightBlue,
TextColor = Color.DarkBlue,
FontWeight = FontWeights.Bold
});
// スタイルのみをPartialGridとして取得
var styleOnly = worksheet.GetPartialGrid("A1:C2", PartialGridCopyFlag.CellStyle);
// 他の範囲にスタイルを適用
worksheet.SetPartialGrid("E1:G2", styleOnly, PartialGridCopyFlag.CellStyle);
例4: 境界線の操作
// 境界線を設定
worksheet.SetRangeBorders("A1:C3", BorderPositions.All, RangeBorderStyle.BlackSolid);
// 境界線のみをPartialGridとして取得
var bordersOnly = worksheet.GetPartialGrid("A1:C3", PartialGridCopyFlag.Borders);
// 他の範囲に境界線を適用
worksheet.SetPartialGrid("E1:G3", bordersOnly, PartialGridCopyFlag.Borders);
例5: マージされたセルを含む範囲の処理
// セルをマージ
worksheet.MergeRange("A1:C1");
worksheet["A1"] = "タイトル";
worksheet["A2"] = "内容1";
worksheet["A3"] = "内容2";
// マージされたセルを含む範囲をPartialGridとして取得
var mergedGrid = worksheet.GetPartialGrid("A1:C3");
// 別の場所に貼り付け(マージ情報も含まれる)
worksheet.SetPartialGrid("E1:G3", mergedGrid);
アクションとUndo/Redo
PartialGridの設定操作はSetPartialGridAction
として実装されており、Undo/Redo機能に対応しています:
// アクションとして実行(Undo/Redo対応)
var action = new SetPartialGridAction(
new RangePosition(4, 0, 3, 3),
partialGrid,
PartialGridCopyFlag.All);
worksheet.DoAction(action);
// 必要に応じてUndoやRedoが可能
worksheet.Undo();
worksheet.Redo();
プロパティとメソッド
主要プロパティ
var partialGrid = new PartialGrid(3, 3);
// サイズ情報
int rows = partialGrid.Rows; // 行数
int columns = partialGrid.Columns; // 列数
// データアクセス(デバッグビルド時のみ公開)
var cellData = partialGrid.Cells[0, 0]; // セルデータへのアクセス
比較メソッド
// PartialGrid同士の比較
bool areEqual = partialGrid1.Equals(partialGrid2, PartialGridCopyFlag.All);
// 特定の要素のみ比較
bool dataEqual = partialGrid1.Equals(partialGrid2, PartialGridCopyFlag.CellData);
bool styleEqual = partialGrid1.Equals(partialGrid2, PartialGridCopyFlag.CellStyle);
注意事項
- パフォーマンス: 大きな範囲のPartialGridを頻繁に操作する場合、パフォーマンスに影響する可能性があります。
- メモリ使用量: PartialGridは元のワークシートとは独立してデータを保持するため、大量のデータを扱う際はメモリ使用量に注意してください。
- 数式の参照: 数式を含むPartialGridを別の場所に設定する際、セル参照は自動的に調整されます。
- マージされたセル: マージされたセルを含む範囲を扱う際は、完全なマージ範囲を含むように注意してください。
- 境界線の所有権: 境界線は隣接するセルと共有される場合があります。
ExPartialGridCopyFlag
を使用して境界線の処理方法を細かく制御できます。
まとめ
PartialGridは、ReoGridでワークシートの一部分を効率的に操作するための強力な機能です。データのコピー、テンプレートの適用、スタイルの複製など、様々な用途に活用できます。適切なコピーフラグを使用することで、必要な情報のみを効率的に処理できます。