スタイルは 4 段階で継承されます。下位が指定した値が勝ち、指定していない(null の)
プロパティは上位から引き継がれます。
セル ◁ 行 ◁ 列 ◁ シート(RootStyle)

4 段階
using unvell.ReoGrid.Core;
using unvell.ReoGrid.Core.Style;
ws.RootStyle = ws.RootStyle with { FontFamily = "Meiryo UI", FontSize = 11f };
ws.SetColumnStyle(1, new StyleRecord { TextAlign = HAlign.Right });
ws.SetRowStyle(0, new StyleRecord { Bold = true });
ws.SetCellStyle(0, 1, new StyleRecord { BackgroundColor = 0xFFFFF3CD });
// B1 の実効スタイル:
// FontFamily = "Meiryo UI" ← シート
// TextAlign = Right ← 列
// Bold = true ← 行
// Background = 0xFFFFF3CD ← セル
StyleRecord effective = ws.GetEffectiveStyle(0, 1);
| 段階 | 設定方法 | 取得 |
|---|---|---|
| セル | ws.SetCellStyle(r, c, style) | ws.GetCellStyle(r, c) |
| 行 | ws.SetRowStyle(row, style) | ws.GetRowStyle(row) |
| 列 | ws.SetColumnStyle(col, style) | ws.GetColumnStyle(col) |
| シート | ws.RootStyle | 同左 |
行が列より優先されます。 同じプロパティを行と列の両方で指定した場合、行の値が勝ちます。
上書きして継承を打ち消す
ws.SetRowStyle(0, new StyleRecord { Bold = true });
// 行が太字でも、このセルだけ太字にしない
ws.SetCellStyle(0, 3, new StyleRecord { Bold = false });
false は「継承しない」ではなく「明示的にオフ」です。継承させたい場合は null にします。
実効スタイルの取得
GetEffectiveStyle(r, c) は 4 段階を解決した結果を返します。描画・印刷・エクスポートは
すべてこれを通ります。
GetCellStyle(r, c) との違いに注意してください。
| メソッド | 返すもの |
|---|---|
GetCellStyle(r, c) | そのセルに直接設定された指定のみ(未設定なら null) |
GetEffectiveStyle(r, c) | 継承を解決した最終結果(常に非 null) |
合成のしくみ
継承の 1 段階は MergeOver です。
var baseStyle = new StyleRecord { FontSize = 11f, Bold = true };
var over = new StyleRecord { Bold = false, Italic = true };
// over 側で指定されたものが勝ち、null のものは baseStyle が残る
StyleRecord result = baseStyle.MergeOver(over);
// → FontSize = 11, Bold = false, Italic = true
性能上の理由
継承があるおかげで、行・列全体の書式をセル数に依存しないコストで表現できます。
// 良い例 — エントリ 1 個
ws.SetColumnStyle(2, new StyleRecord { TextAlign = HAlign.Right });
// 悪い例 — 104 万エントリが実体化する
for (int r = 0; r < ws.RowCount; r++)
ws.SetCellStyle(r, 2, new StyleRecord { TextAlign = HAlign.Right });
見た目は同じでも、メモリ使用量と処理時間がまったく違います。列全体・行全体に対する 書式は必ず行・列単位の API を使ってください。
UI から選択範囲に書式を適用する場合、コントロール側のヘルパが行・列全体の選択を検出して 自動的に行・列スタイルへ振り分けます。
条件付き書式との関係
条件付き書式は継承チェーンの外側にあり、実効スタイルの上に重ねられます。 条件が一致したセルだけが上書きされ、モデルのスタイルは変更されません。
詳細は 条件付き書式 を参照してください。
次に読む
- StyleRecord
- 行と列