ClosedXmlでセルの書式を設定してみた(2)
どもです。
今回も前回に引き続き、ClosedXmlを使用からExcelのセルの書式を設定する方法について書きます。今回は特に、「セルの書式設定」ダイアログ内の「塗りつぶし」タブ内の設定について書きます。
0. 作業環境
今回のエントリでは、以下の環境で作業を行います。
項目 | 内容 |
---|---|
OS | Windows10 Pro(22H2) |
CPU | i7-8700 |
メモリ | 16GB |
IDE | Visual Studio Commnuity 2022(64bit) version 17.7.1 |
対象のフレームワーク | .NET Framework 4.8.1 |
ClosedXml | 0.102.1 |
1. やってみる内容
今回は先述の通り、ClosedXmlを用いてセルの塗りつぶしの設定に挑戦します。
より具体的に書くと、
「セルの書式設定」ダイアログ中の「塗りつぶし」タブで設定可能な内容を、ClosedXmlから設定する
ということを行います。
2. やってみる
2.1. 基本事項
まず基本事項です。
ClosedXmlでセルの塗りつぶしを設定する方法には、罫線の場合同様、以下の2つの方法があります。
- プロパティに罫線を設定する方法
- メソッドを使用する方法
今回は、前回同様メソッドを使用して塗りつぶしを設定します。
2.2. 塗りつぶしの設定
まず、「背景色」の設定です。「背景色」は、SetBackGroundColorメソッドを使用します。1つのセルの背景色を指定するコードは、以下の通りです。
public void Paint1()
{
using (var workbook = new XLWorkbook())
{
var workSheet = workbook.Worksheets.Add(Sheet);
workSheet.Cell(2, 2).Style
.Fill.SetBackgroundColor(XLColor.ArylideYellow);
workbook.SaveAs(Path);
}
}
このコードを実行すると、以下のように背景色が設定されます。
2.3. 塗りつぶしの設定(複数セルの場合)
次に、複数のセルに対して「背景色」を設定してみます。基本的な方法は、1つのセルの場合と同じです。違うのは、「範囲」のSetBackGroundColorメソッドを使用する、という点です。コードは、以下の通りです。
public void Paint2()
{
using (var workbook = new XLWorkbook())
{
var workSheet = workbook.Worksheets.Add(Sheet);
var start = workSheet.Cell(2, 2);
var end = workSheet.Cell(3, 3);
workSheet.Range(start, end).
Style.Fill.SetBackgroundColor(XLColor.GreenPigment);
workbook.SaveAs(Path);
}
}
塗りつぶしの「範囲」は、worksheetの「Range」プロパティから取得します。それ以外は、1つのセルを塗りつぶす場合と同じです。このコードの実行結果は、下図のようになります。
2.4. パターンの設定
次は、「パターン」の設定、特に「パターンの種類」について設定します。「パターンの種類」は、ClosedXmlでは以下のように定義されています。
enum XLFillPatternValues
{
DarkDown,
DarkGray,
DarkGrid,
DarkHorizontal,
DarkTrellis,
DarkUp,
DarkVertical,
Gray0625,
Gray125,
LightDown,
LightGray,
LightGrid,
LightHorizontal,
LightTrellis,
LightUp,
LightVertical,
MediumGray,
None,
Solid
}
これらの定義を用いてセルにパターンを設定する際は、SetPatternTypeメソッドを使用します。具体的なコードは、以下の通りです。
public void Paint3()
{
using (var workbook = new XLWorkbook())
{
var workSheet = workbook.Worksheets.Add(Sheet);
workSheet.Cell(2, 2).Style
.Fill.SetBackgroundColor(XLColor.Transparent)
.Fill.SetPatternType(XLFillPatternValues.DarkDown);
workSheet.Cell(2, 2).Value = "XLFillPatternValues.DarkDown";
(~省略~)
workbook.SaveAs(Path);
}
}
全ての定義に対するコードは長くなるため、ここでは割愛します。いずれのパターンであっても、コードと同じコードになります。
コードを実行した結果は、以下の通りになります。
2.5. パターンの設定(色付き)
セルへパターンを設定する際に、SetPatternColorメソッドを使用することで、色をつけることができます。具体的なコードは、以下の通りです。
public void Paint4()
{
using (var workbook = new XLWorkbook())
{
var workSheet = workbook.Worksheets.Add(Sheet);
workSheet.Cell(2, 2).Style
.Fill.SetBackgroundColor(XLColor.Transparent)
.Fill.SetPatternType(XLFillPatternValues.DarkDown)
.Fill.SetPatternColor(XLColor.Red);
workSheet.Cell(2, 2).Value = "XLFillPatternValues.DarkDown";
workbook.SaveAs(Path);
}
}
しかし、ここで注意しなければならない点があります。それは、メソッドの実行順序です。パターンの色を設定する際には、以下の順番でメソッドを実行する必要があります。
- SetPatternType
- SetPatternColor
この順番を逆に実行した場合、パターンに色は設定されません。
このことを踏まえて、先述のコードを実行した結果を、下図に示します。
右側が、メソッドの実行順序を逆にした場合の結果です。(具体的なコードは、以下の通りです。)
public void Paint4()
{
using (var workbook = new XLWorkbook())
{
var workSheet = workbook.Worksheets.Add(Sheet);
workSheet.Cell(2, 4).Style
.Fill.SetBackgroundColor(XLColor.Transparent)
.Fill.SetPatternColor(XLColor.Red)
.Fill.SetPatternType(XLFillPatternValues.LightDown);
workSheet.Cell(2, 4).Value = "XLFillPatternValues.LightDown";
workbook.SaveAs(Path);
}
}
メソッドの順番については、ClosedXmlのサイトには理由は明記されていませんでした(見つけられませんでした)。そのため、正確な理由は分かりません。ただ、「色よりも先にパターンを設定するのは当たり前」と考えれば、妥当な結果だと思います。
3. まとめ
前回に引き続き、ClosedXmlでエクセルのセルに書式を設定する方法について書きました。今回は、セルのパターンを設定してみました。
ClosedXmlに関係する内容ではないのですが、セルにパターンを設定する場合には、その結果の見た目、見易さを考える必要があります。ClosedXmlでエクセルファイルを自動生成する場合でも、結果として作成されるファイルの見た目は、予め考えて設計・設定しましょう。
今回の内容が、誰かの助けになれば幸いです。ではっ!
Ex. 公開しています
今回のエントリのなかで紹介しているコードは、全てGitHubにて公開しています。本文中に記載できていないコードについては、そちらを参照してください。
ディスカッション
コメント一覧
まだ、コメントがありません