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);
	}
}

しかし、ここで注意しなければならない点があります。それは、メソッドの実行順序です。パターンの色を設定する際には、以下の順番でメソッドを実行する必要があります。

  1. SetPatternType
  2. 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にて公開しています。本文中に記載できていないコードについては、そちらを参照してください。