条件付き書式は OOXML 準拠のフルセットです。XLSX と往復し、Excel で開いても同じ見た目になります (一部の拡張仕様を除く。制限 を参照)。
評価は可視セルのみに対して行われるため、104 万行のシートに範囲を設定しても 描画コストは可視範囲に比例します。
名前空間は unvell.ReoGrid.Core.ConditionalFormatting です。


![]()
値の比較(cellIs)
using unvell.ReoGrid.Core;
using unvell.ReoGrid.Core.ConditionalFormatting;
ws.AddConditionalFormat(range, new CellIsRule
{
Operator = CfOperator.GreaterThan,
Value1 = CfValue.Num(100),
Style = new CfStyle { BackgroundColor = 0xFFFFC7CE, Color = 0xFF9C0006 },
});
// between は Value2 も使う
ws.AddConditionalFormat(range, new CellIsRule
{
Operator = CfOperator.Between,
Value1 = CfValue.Num(0),
Value2 = CfValue.Num(50),
Style = new CfStyle { Bold = true },
});
CfOperator は Equal / NotEqual / GreaterThan / LessThan /
GreaterThanOrEqual / LessThanOrEqual / Between / NotBetween の 8 種です。
オペランドは CfValue.Num(...) か CfValue.Str(...) で作ります。
数式(expression)
// 数式は範囲の左上セルを基準に評価される
ws.AddConditionalFormat(range, new ExpressionRule
{
Formula = "MOD(ROW(),2)=0",
Style = new CfStyle { BackgroundColor = 0xFFF7F7F7 },
});
数式は範囲の左上セルを基準に、各セルへ相対的にずらして評価されます。
$ による固定参照と ROW() / COLUMN() に対応しています。
文字列(containsText)
ws.AddConditionalFormat(range, new ContainsTextRule
{
Operator = CfTextOperator.Contains,
Text = "エラー",
Style = new CfStyle { Color = 0xFFCC0000, Bold = true },
});
CfTextOperator は Contains / NotContains / BeginsWith / EndsWith です。
既定は大文字小文字を区別しません(CaseSensitive で変更できますが、OOXML には
この区別を表現する方法がないため XLSX には保存されません)。
カラースケール
// 3 色スケール
ws.AddConditionalFormat(range, new ColorScaleRule
{
Min = Cfvo.AutoMin,
Mid = Cfvo.Percentile(50),
Max = Cfvo.AutoMax,
MinColor = 0xFFF8696B,
MidColor = 0xFFFFEB84,
MaxColor = 0xFF63BE7B,
});
Mid と MidColor を null にすると 2 色スケールになります。
しきい値(Cfvo)
| 生成 | 意味 |
|---|---|
Cfvo.AutoMin / Cfvo.AutoMax | 範囲の最小値・最大値 |
Cfvo.Number(v) | 固定値 |
Cfvo.Percent(v) | 最小〜最大の線形パーセント |
Cfvo.Percentile(v) | 値のパーセンタイル |
データバー
ws.AddConditionalFormat(range, new DataBarRule
{
Min = Cfvo.Number(0),
Max = Cfvo.AutoMax,
FillColor = 0xFF638EC6,
NegativeFillColor = 0xFFFF555A,
ShowValue = true,
});
範囲に正負が混在する場合、ゼロ軸が自動的に配置され、負の値は左向きに伸びます。
ShowValue = false はセルの文字を隠す「バーのみ表示」です。
アイコンセット
ws.AddConditionalFormat(range, new IconSetRule
{
IconSet = "3TrafficLights1",
Thresholds = [Cfvo.AutoMin, Cfvo.Percent(33), Cfvo.Percent(67)],
ShowValue = true,
});
OOXML の標準セットに対応しています。
3Arrows 3ArrowsGray 3Flags 3TrafficLights1 3TrafficLights2 3Signs 3Symbols 3Symbols2 |
4Arrows 4ArrowsGray 4RedToBlack 4Rating 4TrafficLights |
5Arrows 5ArrowsGray 5Rating 5Quarters |
3Stars 3Triangles 5Boxes |
Reverse = true でアイコンの並びを逆にします。Thresholds の要素数はアイコン数と
一致させてください(IconSets.DefaultThresholds(n) が既定値を返します)。
アイコンはセルの左側に描かれ、値はその右に表示されます。描画は WinForms / WPF / Avalonia / PDF の 4 系統すべてで共通です。
順位・平均・重複
ws.AddConditionalFormat(range, new Top10Rule
{
Rank = 10,
Percent = true, // 上位 10%
Style = new CfStyle { Bold = true },
});
ws.AddConditionalFormat(range, new AboveAverageRule
{
StdDev = 1, // 平均 + 1σ より上
Style = new CfStyle { BackgroundColor = 0xFFE2EFDA },
});
ws.AddConditionalFormat(range, new DuplicateValuesRule
{
Unique = false, // 重複値を強調
Style = new CfStyle { Color = 0xFF9C0006 },
});
Top10Rule—Bottom = trueで下位。しきい値上の同値は Excel と同じく含まれますAboveAverageRule—BelowAverageで下側、StdDevで標準偏差の倍数を指定DuplicateValuesRule—Unique = trueで「1 回だけ現れる値」
優先順位と管理
string id = ws.AddConditionalFormat(range, new CellIsRule
{
Operator = CfOperator.LessThan,
Value1 = CfValue.Num(0),
Priority = 1,
StopIfTrue = true,
Style = new CfStyle { Color = 0xFFCC0000 },
});
ws.RemoveConditionalFormat(id);
int count = ws.ConditionalFormats.Count;
bool any = ws.HasConditionalFormats;
Priority は小さいほど優先されます(Excel と同じ)。StopIfTrue = true の
ルールが一致すると、それより優先度の低いルールは評価されません。
複数のルールが一致した場合、優先度の高いものが指定したプロパティが残り、 指定していないプロパティは次のルールから埋められます。
CfStyle
条件が一致したときに重ねる差分書式です。XLSX の <dxf> に対応します。
| プロパティ | 型 |
|---|---|
BackgroundColor / Color | uint?(ARGB) |
Bold / Italic / Underline | bool? |
セル本体のスタイルは変更されません。条件付き書式は実効スタイルの上に重ねて描画されます。
評価結果を取得する
if (ws.TryEvaluateConditionalFormat(0, 0, out CfCellFormat fmt) && !fmt.IsEmpty)
{
Console.WriteLine(fmt.Fill); // 塗り(cellIs / colorScale の結果)
Console.WriteLine(fmt.TextColor);
Console.WriteLine(fmt.DataBar); // データバーを描く指示(null なら無し)
Console.WriteLine(fmt.Icon); // アイコンセットの選択結果
}
独自の描画層を実装する場合に使います。通常のアプリケーションでは意識する必要はありません。
構造変更への追従
行や列を挿入・削除すると、ルールの適用範囲は自動的に追従します。
制限
XLSX へ書き出す際、以下は OOXML の標準仕様で表現できないため保存されません。
- データバーの負の色・ゼロ軸・枠線(Excel の x14 拡張が必要)
ContainsTextRuleのCaseSensitive
描画は仕様どおり行われ、reogrid-json には保存されます。