【ClosedXML】 条件付き書式を使用する
ClosedXMLで条件付き書式を指定する方法を紹介します。
条件付き書式にはいくつか種類があります。
ここでは以下の4種類について説明を行います。
・指定条件を満たすセルに書式を指定
・カラースケール
・アイコンセット
・データバー
先ずは「指定条件を満たすセルに書式を指定」する方法です。
おそらくこの方法が最もよく使われていると思います。
条件付き書式を設定する場合は、条件付き書式を設定したいセル範囲からAddConditionalFormatメソッドを使用します。
条件を満たすセルにのみ書式を指定する場合はAddConditionalFormatメソッドの後にWhenXxxメソッドを使用して条件を指定します。
WhenXxxメソッドは指定条件に合わせて使い分けてください。
このサンプルコードで使用しているWhenBetweenメソッドはセルの値が指定範囲内に入っているかどうかを確認します。
WhenContainsメソッドはセルの値に指定文字列が含まれているかどうかを確認します。
WhenXxxメソッドの後に書式を指定するためのメソッドを記載します。
書式の指定は複数あっても問題ありません。
注意点はExcelの条件付き書式で指定できない書式はClosedXMLでも指定できない点です。
たとえば、条件付き書式では文字配置を指定することは出来ません。
書式設定時に.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center)と記載してもエラーにはなりませんが、この書式指定は無視されます。
次に、カラースケールを指定する方法について説明します。
カラースケールでは範囲内のセルの値を元にセルの背景色を塗り分けることができます。
カラースケールを使用する場合は、AddConditionalFormatメソッドの後にColorScaleメソッドを使用します。
その後にLowestValueメソッド、Midpointメソッド、HighestValueメソッドを使用して、色分け方法を指定します。
ここでは、最低値には赤、全データの50%の値を中央値として黄色を使用、最大値には緑を指定しました。
カラースケールの設定ですがClosedXML ver0.76を使用している場合、作成されたファイルを開くとエラーが起きます。
どうも構文エラーがあるらしく、その部分を置き換えれば開けますが、カラースケールを指定した部分のデータはなくなります。
ClosedXML ver0.75ではこのエラーが発生しないので、ver 0.76のバグだと思われます。
次に、アイコンセットを使用する方法について説明します。
アイコンセットを使用する場合はAddConditionalFormatメソッドの後にIconSetメソッドで使用するアイコンセットの種類を指定します。
その後アイコンを指定する条件設定を行います。
サンプルコードでは3種類のアイコンを使用していますので、アイコンの条件範囲を3つ指定します。
AddValueメソッドで条件を指定していきます。
このコードでは、
・数値が0以上
・数値が4以上
・数値が7以上
の3条件を指定しています。
これにより、
0~3 = アイコン1
4~6 = アイコン2
7以上=アイコン3
が指定されます。
最後にデータバーを使用する方法について説明します。
データバーを使用する場合はAddConditionalFormatメソッドの後にDataBarメソッドを使用します。
DataBarメソッドの引数には棒グラフの色を指定します。
そのあとにLowestValueメソッドとHighestValueメソッドを呼べばOKです。
var sheet = book.AddWorksheet("値"); // 適当に表を作成する var data = new[] { new object[] { 1, 2, 3, 4, 5}, new object[] { 6, 7, 8, 9, 10}, new object[]{"A", "B", "AC", "D"}, }; sheet.Cell("A1").InsertData(data); // 条件付き書式を指定する var range = sheet.RangeUsed(); range.AddConditionalFormat() .WhenBetween(1, 5) // 条件 .Fill.SetBackgroundColor(XLColor.Navy) // 書式 .Font.SetFontColor(XLColor.Yellow); // 書式 // さらに条件を追加する場合 range.AddConditionalFormat() .WhenContains("A") // Aを含む .Font.SetFontColor(XLColor.Red);このコードを実行すると以下の様になります。

var sheet = book.AddWorksheet("カラースケール"); // 適当に表を作成する var data = new[] { new object[] { 1, 2, 3, 4, 5}, new object[] { 6, 7, 8, 9, 10}, }; sheet.Cell("A1").InsertData(data); // 条件付き書式を指定する var range = sheet.RangeUsed(); range.AddConditionalFormat() .ColorScale() .LowestValue(XLColor.Red) .Midpoint(XLCFContentType.Percent, 50, XLColor.Yellow) .HighestValue(XLColor.Green);このコードを実行すると以下の様になります。

var sheet = book.AddWorksheet("アイコン"); // 適当に表を作成する var data = new[] { new object[] { 1, 2, 3, 4, 5}, new object[] { 6, 7, 8, 9, 10}, }; sheet.Cell("A1").InsertData(data); // 条件付き書式を指定する var range = sheet.RangeUsed(); range.AddConditionalFormat() .IconSet(XLIconSetStyle.ThreeSymbols) .AddValue(XLCFIconSetOperator.EqualOrGreaterThan, 0, XLCFContentType.Number) .AddValue(XLCFIconSetOperator.EqualOrGreaterThan, 4, XLCFContentType.Number) .AddValue(XLCFIconSetOperator.EqualOrGreaterThan, 7, XLCFContentType.Number);このコードを実行すると以下の様になります。

var sheet = book.AddWorksheet("データバー"); // 適当に表を作成する var data = new[] { new object[] { 1, 2, 3, 4, 5}, new object[] { 6, 7, 8, 9, 10}, }; sheet.Cell("A1").InsertData(data); // 条件付き書式を指定する var range = sheet.RangeUsed(); range.AddConditionalFormat() .DataBar(XLColor.Navy) .LowestValue() .HighestValue();このコードを実行すると以下の様になります。

スポンサーサイト