ReoGridは複数行の列ヘッダーをサポートしており、複数行、結合セル、個別のスタイリングを含む複雑なヘッダー構造を作成できます。この機能は、階層的またはグループ化された列ヘッダーを表示する場合に便利です。

複数行ヘッダーの作成
ExtensionColumnHeader プロパティを介して拡張列ヘッダーにアクセスします:
var extensionHeader = worksheet.ExtensionColumnHeader;
ヘッダー行数の設定
RowCount プロパティまたは SetRowCount メソッドを使用して、ヘッダーの行数(1〜10)を定義します:
// Set 3 header rows
extensionHeader.SetRowCount(3);
// Or use the property
extensionHeader.RowCount = 3;
結果:

注意: 拡張列ヘッダーは1〜10行をサポートします。
RowCountを1に設定すると、デフォルトの単一行ヘッダーに戻ります。
ヘッダー行数と合計の高さの取得
int rowCount = extensionHeader.RowCount;
int totalHeight = extensionHeader.TotalHeight; // Total height in pixels of all header rows
ヘッダーセルへのアクセス
複数行ヘッダーのセルは、左上隅の原点(0, 0)からの(行, 列)座標を使用します:

// Access a cell by row and column index
HeaderCell cell = extensionHeader[0, 0];
// Or via the Cells collection
HeaderCell cell2 = extensionHeader.Cells[1, 3];
HeaderCellプロパティ
| プロパティ | 型 | 説明 |
|---|---|---|
Text | string | ヘッダーセルの表示テキスト |
Style | HeaderCellStyle | 外観カスタマイズ用のスタイルオブジェクト |
Body | IHeaderBody | 描画用のカスタムヘッダーボディ |
RowIndex | int | セルの行インデックス(読み取り専用) |
ColumnIndex | int | セルの列インデックス(読み取り専用) |
IsValid | bool | セルが有効か(結合に吸収されていないか) |
IsMerged | bool | セルが結合範囲の一部か |
IsMergedStartCell | bool | 結合範囲の左上セルか |
MergedStartCell | HeaderCell | 結合の左上セル(結合されていない場合は自身を返す) |
CellPosition | CellPosition | CellPosition 構造体としての位置 |
RangePosition | RangePosition | このセルが結合の一部である場合の範囲 |
PositionAddress | string | アドレス文字列(例:"A1" または結合されている場合 "A1:B2") |
TextColor | SolidColor? | テキスト色(非推奨 — Style.TextColor を使用) |
BackColor | SolidColor? | 背景色(非推奨 — Style.BackColor を使用) |
セルの結合と結合解除
セルの結合
MergeCells を使用してセルを結合します。パラメーターは:開始行、開始列、行スパン、列スパンです。
extensionHeader.MergeCells(int startRow, int startColumn, int rowSpan, int columnSpan);
例:
// Merge cell (0,0) spanning 3 rows and 1 column
extensionHeader.MergeCells(0, 0, 3, 1);
// Merge from cell (0,1) spanning 1 row and 4 columns
extensionHeader.MergeCells(0, 1, 1, 4);

セルテキストの設定
extensionHeader[0, 0].Text = "No.";
extensionHeader[0, 1].Text = "Category A";

完全な複数行ヘッダーの例
複雑な階層ヘッダーを作成する完全な例を示します:
// Set 3 rows
extensionHeader.SetRowCount(3);
// Merge cells to create the hierarchy
extensionHeader.MergeCells(0, 0, 3, 1); // "No." spans all 3 rows
extensionHeader.MergeCells(0, 1, 1, 4); // Top-level group 1
extensionHeader.MergeCells(1, 1, 1, 2); // Mid-level group 1a
extensionHeader.MergeCells(1, 3, 1, 2); // Mid-level group 1b
extensionHeader.MergeCells(0, 5, 3, 1); // "Target" spans all 3 rows
extensionHeader.MergeCells(0, 6, 1, 4); // Top-level group 2
extensionHeader.MergeCells(1, 6, 2, 1); // Mid-level group 2a (spans 2 rows)
extensionHeader.MergeCells(1, 8, 2, 2); // Mid-level group 2b (spans 2 rows)
// Set text for all cells
extensionHeader[0, 0].Text = "No.";
extensionHeader[0, 1].Text = "Category A";
extensionHeader[1, 1].Text = "Sub-A1";
extensionHeader[1, 3].Text = "Sub-A2";
extensionHeader[2, 1].Text = "Detail 1";
extensionHeader[2, 2].Text = "Detail 2";
extensionHeader[2, 3].Text = "Detail 3";
extensionHeader[2, 4].Text = "Detail 4";
extensionHeader[0, 5].Text = "Target";
extensionHeader[0, 6].Text = "Category B";
結果:

セルの結合解除
extensionHeader.UnmergeCells(0, 7);
結合状態の確認
var cell = extensionHeader[0, 0];
if (cell.IsMerged)
{
Console.WriteLine($"Cell is merged. Start cell: {cell.MergedStartCell.PositionAddress}");
}
if (cell.IsMergedStartCell)
{
Console.WriteLine($"This is the start of a merge spanning {cell.RangePosition}");
}
// Check if a cell contains another
bool contains = cell.Contains(extensionHeader[1, 0]);
ヘッダーセルのスタイリング
各ヘッダーセルには、外観をカスタマイズするための HeaderCellStyle 型の Style プロパティがあります。
HeaderCellStyleプロパティ
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
TextColor | SolidColor? | null(システムデフォルト) | テキスト色。null に設定すると削除されます。 |
BackColor | SolidColor? | null(システムデフォルト) | 背景色。null に設定すると削除されます。 |
FontSize | float | 10.5f(WinForms) | フォントサイズ |
FontFamily | string | "Arial"(WinForms) | フォントファミリー名(WinForms) |
Font | FontFamily | システムデフォルト(WPF) | フォントファミリー(WPF) |
FontStyle | FontStyles | Regular | フォントスタイル(太字、斜体) |
FontWeight | FontWeight | システムデフォルト(WPF) | フォントウェイト(WPFのみ) |
TextUnderLine | bool | false | テキストに下線を引くか |
HorizontalAlignment | ReoGridHorAlign | Center | テキストの水平揃え |
VerticalAlignment | ReoGridVerAlign | Middle | テキストの垂直揃え |
TextWrapMode | TextWrapMode | NoWrap | テキストの折り返しモード |
Padding | PaddingValue | (空) | セルのパディング |
例:ヘッダーセルのスタイリング
// Set background color for a category header
extensionHeader[0, 1].Style.BackColor = new SolidColor(Color.LightBlue);
// Set font style for a title cell
extensionHeader[0, 0].Style.FontSize = 12;
extensionHeader[0, 0].Style.FontStyle = FontStyles.Bold;
extensionHeader[0, 0].Style.TextColor = new SolidColor(Color.DarkBlue);
// Set text alignment
extensionHeader[0, 0].Style.HorizontalAlignment = ReoGridHorAlign.Center;
extensionHeader[0, 0].Style.VerticalAlignment = ReoGridVerAlign.Middle;
// Enable text wrapping for long header text
extensionHeader[0, 1].Style.TextWrapMode = TextWrapMode.WordBreak;
// Add padding
extensionHeader[0, 0].Style.Padding = new PaddingValue(4, 2, 4, 2);
セルスタイルのリセット
extensionHeader[0, 0].Style.Reset();
セル間のスタイルコピー
extensionHeader[1, 1].Style.CopyFrom(extensionHeader[0, 1].Style);
WorksheetRangeStyleへの変換
HeaderCellStyle をワークシートセルで使用するための WorksheetRangeStyle に変換します:
WorksheetRangeStyle rangeStyle = extensionHeader[0, 0].Style.ToRangeStyle();
行の高さの調整
各ヘッダー行の高さを個別に調整できます:
// Set height of the first header row
extensionHeader.Rows[0].Height = 40;
// Set height of the second header row
extensionHeader.Rows[1].Height = 25;
// Access row count
int count = extensionHeader.Rows.Count;
マウスイベント
拡張列ヘッダーは、インタラクティブな動作のためのマウスイベントを提供します:
// Mouse events on the entire extension header
extensionHeader.MouseDown += (s, e) =>
{
Console.WriteLine($"Mouse down at row:{e.RowIndex}, col:{e.ColumnIndex}");
};
extensionHeader.MouseMove += (s, e) =>
{
Console.WriteLine($"Mouse move at row:{e.RowIndex}, col:{e.ColumnIndex}");
};
extensionHeader.MouseUp += (s, e) =>
{
Console.WriteLine($"Mouse up at row:{e.RowIndex}, col:{e.ColumnIndex}");
};
ヘッダーマウスイベント引数
| プロパティ | 型 | 説明 |
|---|---|---|
RowIndex | int | 拡張ヘッダー内の行インデックス(結合セルを無視) |
ColumnIndex | int | 拡張ヘッダー内の列インデックス(結合セルを無視) |
PositionToColumn | int | 物理的な列に対するマウス位置 |
個別セルのマウスイベント
各 HeaderCell も独自のマウスイベントを発火します:
var cell = extensionHeader[0, 0];
cell.MouseDown += (s, e) =>
{
Console.WriteLine($"Clicked header cell: {e.HeaderCell.Text}");
};
cell.MouseUp += (s, e) =>
{
// Handle mouse up
};
cell.MouseMove += (s, e) =>
{
// Handle mouse move
};
HeaderCellMouseEventArgs
| プロパティ | 型 | 説明 |
|---|---|---|
HeaderCell | HeaderCell | イベントをトリガーしたヘッダーセル |
IsCancelled | bool | true に設定するとイベントをキャンセル |
列の選択
複数行の列ヘッダーでは、セルが水平方向に結合されているかどうかに関係なく、常に個別の列を選択できます。選択された列はハイライト色で表示されます:

結合セル領域の一部の列のみが選択されている場合、それらのセルは部分的にハイライトされます:

列の非表示
列が非表示の場合、複数行ヘッダー内の非表示列の位置に太い線が表示されます:

ウィンドウ枠の固定との使用
複数行の列ヘッダーは、通常の列ヘッダーと同様にワークシートのウィンドウ枠固定と連携します。ワークシートがスクロールされても、固定された列は表示されたままです:

アウトラインとの使用
複数行の列ヘッダーはアウトラインと連携します。列が折りたたまれると、対応するヘッダーセルが非表示になります:

拡張ヘッダーのリセット
拡張ヘッダーをデフォルト状態にリセットします(すべての結合とテキストを削除):
extensionHeader.Reset();
PartialGridへの変換
拡張ヘッダーを PartialGrid オブジェクトとしてエクスポートします:
// Export all columns
var partialGrid = extensionHeader.ConvertToPartialGrid();
// Export only specific columns
var partialGrid = extensionHeader.ConvertToPartialGrid(new int[] { 0, 1, 2, 3 });
関連トピック
- 行、列、ヘッダー — 基本的な行/列操作とヘッダーのカスタマイズ
- ウィンドウ枠の固定 — 行と列の固定
- グループとアウトライン — 展開/折りたたみ付きの行/列グループ化