条件付きスタイル
Excelの条件付き書式とほぼ同様に動作できる機能です。ただし、Excelでは条件を満たしているセルのスタイルと書式を設定できますが、ReoGridではスタイルにも対応しています。条件によって書式を適用することができません。
条件
条件(Rule)の作成
Rule は数式、適用範囲と適用スタイルによって作成できます。
var rule1 = new Rule("THIS > 1000", "A1:Z30", new WorksheetRangeStyle
{
Flag = PlainStyleFlag.TextColor,
TextColor = SolidColor.Yellow,
};
条件の追加
ワークシートの ConditionalStyles プロパティは条件を管理するためのコレクションです。
このコレクションに追加した条件は、自動的に適用されます。
sheet.ConditionalStyles.Add(rule1);
条件の削除
sheet.ConditionalStyles.Remove(rule1);
条件の一時停止
条件の Disabled プロパティを true に設定すると、条件が一時停止されます。
rule1.Disabled = true
条件となる数式
セルで使える数式は条件として利用できます。
大小比較
| 比較 | 数式 | 記述例 |
|---|---|---|
| 以上 | >= | THIS >= 1000 |
| 以下 | <= | THIS <= 1000 |
| より大きい | > | THIS > 1000 |
| より小さい | < | THIS < 1000 |
| 等しい | = | THIS=5 |
| 等しくない | <> | THIS<>10 |
THISキーワード
THIS キーワードは ReoGrid のキーワードです(Excelで利用できません)。
THIS キーワードは条件数式が適用されているセル、そのセルの値を取得するためのキーワード。Excelははセルの相対オフセットでセル値を取得しているに対して、 THIS キーワードはよりわかりやすく、直感的に数式を書けるように設計されています。
例えば、 A1 セルに =A1 数式を適用する場合、 A1 セルに =THIS 数式を適用することと同じ結果となります。複数のセルに同じ =THIS 数式を適用でき、アプリケーションでよりわかりやすく、便利に条件付きスタイル機能を利用することができます。
COLVAL関数
COLVAL 関数はセルと同じ行にある他の列のセルの値を取得できます。
例えば、 該当数式が適用しているセルのB列(通貨列)の値を取得し、 USD 以外であるかどうかを判別する数式を以下のように記述します。
COLVAL(B) <> "USD"
COLVAL関数は、 THIS キーワードと同様に、数式を適用しているセルの座標がわからなくても、近隣のセルや列の値を便利に取得できる関数です。
COLVALのパラメータは4つの方式で指定できます。
列のアドレスで指定
COLVAL(B) または COLVAL(AH) は B 列または AH 列を表します。
COLVAL(B) = "買"
列のインデックスで指定
COLVAL(2) は 3列目を表します(0ベス)。
AND(COLVAL(2) = "USD", COLVAL(4) < 10)
列のIDで指定
列ベースデータソースでデータをワークシートに追加した場合、列ベースデータソースの列IDを文字列で指定できます。 データセットが複数ある場合、列IDが含まれる一つ目のデータソースが対象となります。
例えば、科目列の値が 11 の数式を以下のように記述できます。
COLVAL("kamoku") = 11
相対位置で列を指定
COLVAL 関数に THIS キーワードを渡すと、現在のセルから相対位置を計算して値を取得できます。
例えば、「現在のセルの値は一つ左の列の値より大きい」という数式を以下のように記述できます。
THIS > COLVAL(THIS - 1)
CIDVAL 関数
CIDVAL 関数は列IDで列を指定してその列の値を取得する関数です。
COLVAL("") と同じ効果の関数で、 COLVAL は列IDを文字列で指定しますが、 CIDVAL 関数は列IDをキーワードとして記述できます。
CIDVAL(kamoku)
意味は
COLVAL("kamoku")
と同様です。文字列文法のダブルクォーテーションを省略できます。
ROWVAL 関数
ROWVAL 関数は COLVAL 関数の行に対する関数で、相対行のセルの値を取得できます。
条件の優先順位
同じセルに複数の条件がある場合、以下のルールで演算されます。
- 同じスタイルが指定された場合、あとに追加した条件のスタイルが採用されます(あと勝ち)
- 違うスタイルが指定された場合、条件が満たしたすべてのスタイルが適用されます
スタイルプロパティの優先度について
ReoGridでさまざまな方法でセルのスタイルを指定した場合、スタイルプロパティの優先順位は以下の通りです。
コンポーネントスタイル(すべてのセルの共通色) > 縞々模様スタイル > セルスタイル > 集約行スタイル > 条件付きスタイル
低 → 高
右側にあるスタイルが優先に採用されます(左側のスタイルプロパティが上書きされます)。
パフォーマンスについて
データが変更された際に、すべての条件の数式が再評価されます。 ワークシートの初期化や、大量のセルのデータを更新する場合、条件書式の評価に時間がかかることがあります。 アプリケーションではこの点を配慮し、データのローディング前に条件付きスタイルを適用するより、データの準備完了後に条件付きスタイルを適用したほうが、パフォーマンスが高くなります。
また、データを頻繁に変更する間、条件付きスタイルを一時停止することによって、パフォーマンスを向上することもできます。
ワークシートのプロパティ SuspendConditionalStyleUpdate を true に設定すると、
条件付き書式機能が一時オフとなります。
sheet.SuspendConditionalStyleUpdate = true
... ワークシート初期化 ...
sheet.SuspendConditionalStyleUpdate = false
設定中の条件付きスタイルの強制再適用
セルの変更があった場合、条件付きスタイルはほぼ自動的に動作します。 何かしらの原因で動作しない場合、 条件付きスタイルを強制適用することができます。 また、条件付きスタイルを一時停止する場合、手動で条件付きスタイルを適用したい場合、以下のメソッドを利用します。
sheet.ApplyAllConditionalStyles()
条件付きスタイルサンプル例
売買区分が「買」の場合、行データの背景色を設定します。
var rule1 = new Rule("CIDVAL(baibai)=\"買\"", "A1:Z30", new WorksheetRangeStyle
{
Flag = PlainStyleFlag.BackColor,
BackColor = SolidColor.DarkOrchid,
});
sheet.ConditionalStyles.Add(rule1);

その他の例
B列(通貨)がUSDの場合、文字テキストを黄色に設定し、太字にします。
sheet.ConditionalStyles.Add(new Rule("COLVAL(B)=\"USD\"", "A1:Z30", new WorksheetRangeStyle
{
Flag = PlainStyleFlag.TextColor | PlainStyleFlag.FontStyleBold,
TextColor = SolidColor.Yellow,
Bold = true,
}));
セル値が 2000 より大きい場合、テキスト色を赤にします。 この条件と上の条件、両方とも満たす場合、上の条件のテキスト色が上書きされ、「太字+赤色」のスタイルとなります。
sheet.ConditionalStyles.Add(new Rule("THIS > 2000", "A1:Z30", new WorksheetRangeStyle
{
Flag = PlainStyleFlag.TextColor,
TextColor = SolidColor.Red,
}));
負数のスタイル
条件が満たして、さらにセルの数値がマイナスの場合、特別なスタイルを指定することができます。
sheet.ConditionalStyles.Add(new Rule("THIS > 500", "E1:E200", new WorksheetRangeStyle
{
Flag = PlainStyleFlag.TextColor, // 通常のスタイル
TextColor = SolidColor.Red,
}, new WorksheetRangeStyle
{
Flag = PlainStyleFlag.BackColor, // 負数スタイル
BackColor = SolidColor.Yellow,
}));