myesn

myEsn2E9

hi
github

NPOI: 導出 EXCEL(HSSF) 自定義單元格(Cell)背景色

[!IMPORTANT]

  1. 不同的顏色需要設定到不同的索引處,否則會被覆蓋。
  2. 索引的範圍是有限的,需要在調色板中預設自定義色,在註釋中有說明。
var hssfworkbook = new HSSFWorkbook();
ISheet sheet1 = hssfworkbook.CreateSheet("Sheet1");

//填充背景
ICellStyle style1 = hssfworkbook.CreateCellStyle();

#region 使用調色板生成基於 hex 的自定義顏色

var palette = hssfworkbook.GetCustomPalette();
// hex to 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 兩個字段,用 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("hi");
cell00.CellStyle = style1;

調色板自定義 RGB 色:

// 自定義統計顏色(3個檔次對應3個顏色)在 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);
}
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。