[! 重要]
- 異なる色は異なるインデックスに設定する必要があります。そうしないと上書きされます。
- インデックスの範囲は限られており、カラーパレットでカスタム色を事前に設定する必要があります。コメントに説明があります。
var hssfworkbook = new HSSFWorkbook();
ISheet sheet1 = hssfworkbook.CreateSheet("Sheet1");
//背景を塗りつぶす
ICellStyle style1 = hssfworkbook.CreateCellStyle();
#region パレットを使用して、hexベースのカスタムカラーを生成する
var palette = hssfworkbook.GetCustomPalette();
// hexからargbへ
// ColorTranslator静的クラス:
// .net frameworkでは、ネイティブdllを参照に追加し、using System.Drawing;をインポートします。
// .net(core)では、nugetからSystem.Drawing.Commonパッケージを追加し、using System.Drawing;をインポートします。
var argb = ColorTranslator.FromHtml("#ff0303");
// インデックス値は、内部でindex-8として使用されます。差分はnum >= 0 && num < 56を満たす必要があります。
var customBackgroundColorIndexInPalette = (short)8;
palette.SetColorAtIndex(customBackgroundColorIndexInPalette, argb.R, argb.G, argb.B);
#endregion
//セルの背景色を設定するには、FillForegroundColor + FillPatternの2つのフィールドを使用する必要があります。FillBackgroundColorフィールドでは背景色を設定できません。
//前景色と塗りつぶしパターンを設定し、前景色はパレットの指定されたインデックスのRGB色を使用します。
style1.FillForegroundColor = customBackgroundColorIndexInPalette; //NPOI.HSSF.Util.HSSFColor.Blue.Index;
style1.FillPattern = FillPattern.SolidForeground;
//位置0,0のセルを作成し、セルの内容とスタイルを設定する
var cell00 = sheet1.CreateRow(0).CreateCell(0);
cell00.SetCellValue("こんにちは");
cell00.CellStyle = style1;
カスタム RGB カラーのパレット:
// Excelワークブックのカスタムパレット内のカスタムカラーのインデックス
private static readonly short _color1IndexInWorkbookCustomPalette = 8;
private static readonly short _color2IndexInWorkbookCustomPalette = 9;
private static readonly short _color3IndexInWorkbookCustomPalette = 10;
// Excelワークブックのカスタムパレットにすべてのカスタムカラーを設定する
private static void SetAllColorIndexOnWorkbookCustomPalette(HSSFWorkbook workbook)
{
SetColorIndexOnWorkbookCustomPalette(workbook, _color1IndexInWorkbookCustomPalette, ConfigHelper.Setting.Color1);
SetColorIndexOnWorkbookCustomPalette(workbook, _color2IndexInWorkbookCustomPalette, ConfigHelper.Setting.Color2);
SetColorIndexOnWorkbookCustomPalette(workbook, _color3IndexInWorkbookCustomPalette, ConfigHelper.Setting.Color3);
}
// Excelワークブックのカスタムパレットの指定されたインデックスに、hex形式のカスタムカラーを設定する
private static void SetColorAtIndexOnWorkbookCustomPalette(HSSFWorkbook workbook,short rgbColorIndexInPalette, string hexColor)
{
if (rgbColorIndexInPalette < 8 || rgbColorIndexInPalette > 56) throw new IndexOutOfRangeException(nameof(rgbColorIndexInPalette));
var palette = workbook.GetCustomPalette();
var argb = ColorTranslator.FromHtml(hexColor);
palette.SetColorAtIndex(rgbColorIndexInPalette, argb.R, argb.G, argb.B);
}