NPOI自定義單元格背景顏色

2022-02-12 17:29:26 字數 1987 閱讀 1196

經常在npoi群裡聊天時發現有人在問npoi設定單元格背景顏色的問題,而tony qu大神的部落格裡沒有相關教程,剛好最近在做專案時研究了一下這一塊,在這裡總結一下。

在npoi中預設的顏色類是hssfcolor,如果要使用npoi中的顏色就必須想辦法轉化為hssfcolor。分析了一下原**,hssfcolor內建了幾十種顏色,都是用內部類繼承hssfcolor這個類來定義的。那麼除非去修改源**,否則是不能以這種方式來使用自定義顏色的。

除了繼承的方式外,還有另外一種方式使用hssfcolor。答案就是從調色盤中獲取顏色。從調色盤中獲取顏色的主要步驟是:1、將顏色的rgb值新增進調色盤hssfpalette中。2、呼叫hssfpalette中findcolor方法獲取hssfcolor例項。3、在需要使用顏色的地方使用hssfcolor的getindex方法獲取index值。以下是實現相關源**:

int startcolindex = 0;

int rowindex = 0;

int colindex = startcolindex;

hssfworkbook hssfworkbook = new hssfworkbook();

isheet sheet = hssfworkbook.createsheet("sheet1");

irow row;

icell cell;

hssfpalette palette = hssfworkbook.getcustompalette();

listcolorlist = new list();

random random = new random(guid.newguid().gethashcode());

for (int i = 0; i < random.next(100, 200); i++)

short first_color_index = (short)0x8;

for (int i = 0; i < colorlist.count; i++)

//index的取值範圍 0x8 - 0x40

palette.setcoloratindex((short)(first_color_index + i), colorlist[i].r, colorlist[i].g, colorlist[i].b);

}for (int i = 0; i < colorlist.count; i++)

colindex = startcolindex;

row = sheet.createrow(rowindex);

cell = row.createcell(colindex);

icellstyle colorstyle = hssfworkbook.createcellstyle();

colorstyle.fillpattern = fillpatterntype.solid_foreground;

var v1 = palette.findcolor(colorlist[i].r, colorlist[i].g, colorlist[i].b);

if (v1 == null)

colorstyle.fillforegroundcolor = v1.getindex();

cell.cellstyle = colorstyle;

colindex++;

rowindex++;

}string filename = @"test.xls";

using (filestream file = new filestream(filename, filemode.create))

需要注意的是,調色盤的取值範圍是0x8 - 0x40,即8-64,也就是說只支援56種顏色,56種顏色在專案中也差不多夠用了。還有就是所呼叫的顏色一定要存在於調色盤中否則在呼叫findcolor後會返回null,再呼叫hssfcolor的getindex方法時會報錯。

NPOI自定義單元格背景顏色

經常在npoi群裡聊天時發現有人在問npoi設定單元格背景顏色的問題,而tony qu大神的部落格裡沒有相關教程,剛好最近在做專案時研究了一下這一塊,在這裡總結一下。在npoi中預設的顏色類是hssfcolor,如果要使用npoi中的顏色就必須想辦法轉化為hssfcolor。分析了一下原 hssfc...

NPOI 自定義單元格背景顏色 Excel

npoi針對office2003使用hssfworkbook,對於offce2007及以上使用xssfworkbook 今天我以hssfworkbook自定義顏色為例說明,office2007的未研究呢 在npoi中預設的顏色類是hssfcolor,它內建的顏色有幾十種供我們選擇,如果不夠怎麼辦,不...

NPOI 自定義單元格背景顏色 Excel

npoi針對office2003使用hssfworkbook,對於offce2007及以上使用xssfworkbook 今天我以hssfworkbook自定義顏色為例說明,office2007的未研究呢 在npoi中預設的顏色類是hssfcolor,它內建的顏色有幾十種供我們選擇,如果不夠怎麼辦,不...