V4 V5

交互行スタイル(しま模様 / banded rows)はスタイルではありません。 セルにも行にも何も書かず、シートが RowBanding を 1 つ持つだけです。 描画のたびに、可視セルについてだけ解決されます。

そのため 104 万行を縞にしてもオブジェクトは 1 個で、並べ替え・フィルタ・行の挿入で崩れません

基本

using unvell.ReoGrid.Core;
using unvell.ReoGrid.Core.Style;

// シート全体を 1 行おきに薄い青で塗る。オブジェクトは 1 個だけ
ws.Banding = RowBanding.Every(0xFFF2F7FBu);

// 縞をやめる
ws.Banding = null;

RowBanding.Every(color) は「シート全体を 1 行おきに color で塗る」の短縮形です。 FirstColor を空のままにするので、塗られるのは 1 行おきの片側だけ、 残りはシートの背景がそのまま出ます。

範囲と帯の太さ

// 見出し行を外し、2 行ずつの帯を 2 色で塗る
ws.Banding = new RowBanding
{
	Range = RangePosition.Parse("A2:F1000"),
	FirstColor = 0xFFFFFFFFu,
	SecondColor = 0xFFEFF4F9u,
	StripeSize = 2,
};
プロパティ既定内容
Rangenull(シート全体)縞を掛ける範囲。範囲の先頭行が 1 本目の帯になるので、見出し行を外して指定できます
FirstColornull1 本目の帯の色(ARGB)。null は塗らない
SecondColornull2 本目の帯の色(ARGB)。null は塗らない
StripeSize11 帯あたりの行数。1 が classic な 1 行おき
ModeVisibleRow非表示行を数に入れるかどうか

非表示行の扱い

// 既定。非表示行を数えないので、フィルタしても縞が 2 行続かない
var banding = new RowBanding
{
	SecondColor = 0xFFEFF4F9u,
	Mode = BandingMode.VisibleRow,
};
ws.Banding = banding;

// 行番号に縞を固定する(非表示行も 1 行として数える)
ws.Banding = banding with { Mode = BandingMode.PhysicalRow };
  • VisibleRow(既定) — 見えている行だけを数えます。フィルタで行が消えても 縞が振り直されるので、同じ色が 2 行続きません
  • PhysicalRow — 行番号で数えます。縞がその行に貼り付いたままになります。

VisibleRow の数え上げは AxisIndex.HiddenCountBefore(整列済み配列+二分探索、 バージョンでキャッシュ)で行うため、50 万行までスクロールしても走査は発生しません。

塗りの優先順位

上から順に強く、先に決まったところで止まります。

  1. 条件付き書式 の塗り
  2. セル自身の塗り — セル・行・列のいずれかが背景色を持っている場合

2 番目が「継承済みの実効スタイル」ではなくスタイルの鎖を見ている点が要点です。 実効スタイルはすべてのセルがルートの白を持つため、それで判定すると「背景色を持つセル」が 全セルになってしまいます。鎖に問うことで、わざと白く塗ったセルもちゃんと縞を破れます

bool striped = ws.HasBanding;

// その行に実際に塗られる色(塗られないなら null)。描画側が使う問い合わせ
uint? fill = ws.BandFillFor(3, 0);

// セル自身・行・列のいずれかが背景色を持っているか。
// 持っていれば縞はそのセルを塗らない
bool own = ws.HasOwnBackground(3, 0);

_ = (striped, fill, own);

行・列の挿入削除

帯は縞を掛けたデータに追随します。範囲の行が挿入・削除されれば Range も動き、 帯の行が全部消えれば帯自体も消えますBandingnull に戻ります)。

コントロール側

3 つのコントロールすべてに SetRowBanding(RowBanding?) があります。 null を渡せば解除です。

I/O

  • reogrid-json:シートの banding として保存されます(V5 の拡張。既定値のキーは省略するので、 縞を使っていないシートの出力は reogrid-web とバイト単位で一致したままです)。
  • XLSX未対応です。Excel は縞をシートの属性ではなくテーブルスタイルの中に持つため、 往復させるならテーブル機能と一緒に実装する必要があります(StripeSize がその共有の継ぎ目です)。 XLSX として書き出すと縞は失われます。

Studio で試す

Format ▸ Alternating Rows ▸ Stripe the Whole Sheet / Stripe the Selection / Stripe the Selection…(色を選ぶ)/ None

次に読む

ページの内容は役に立ちましたか?