經常在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;需要注意的是,調色盤的取值範圍是0x8 - 0x40,即8-64,也就是說只支援56種顏色,56種顏色在專案中也差不多夠用了。還有就是所呼叫的顏色一定要存在於調色盤中否則在呼叫findcolor後會返回null,再呼叫hssfcolor的getindex方法時會報錯。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))
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,它內建的顏色有幾十種供我們選擇,如果不夠怎麼辦,不...