有些自定義的顏色,npoi無法讀取,需要手動寫方案實現,分別是在打開wrokbook的時候,加上你自定義的顏色,然后在讀取excel內容的時候通過一些特征判斷是否是自定義的顏色,改變其index的值,具體方案如下:
如果是07版的是:
IWorkbook npoiWorkbook = null;
XSSFWorkbook xSSFWorkbook = new XSSFWorkbook(fs);
int uindex = xSSFWorkbook.NumCellStyles;
XSSFCellStyle style = (XSSFCellStyle)xSSFWorkbook.CreateCellStyle();
style.FillForegroundColor = (short)(uindex);
style.FillPattern = FillPattern.SolidForeground;
XSSFColor xssfColor = new XSSFColor();
xssfColor.SetRgb(new byte[] { 191, 191, 191 });
style.SetFillForegroundColor(xssfColor);
npoiWorkbook = (IWorkbook)xSSFWorkbook;
如果是03版的是:
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(fs);
HSSFPalette palette = hssfWorkbook.GetCustomPalette();
palette.SetColorAtIndex((short)8, (byte)191, (byte)191, (byte)191);
HSSFCellStyle style = (HSSFCellStyle)hssfWorkbook.CreateCellStyle();
style.FillForegroundColor = (short)(8);
style.FillPattern = FillPattern.SolidForeground;
npoiWorkbook = (IWorkbook)hssfWorkbook;
如上兩段是打開wrokbook時候的處理,讀取的處理如下:
如果是07版本:
if (cell.CellStyle.FillForegroundColor == 0 && cell.CellStyle.Index != workbook.NumCellStyles - 2)
{
cell.CellStyle.FillForegroundColor = (short)(workbook.NumCellStyles - 1);
}
但是07比較坑,不知道是不是我沒發現還是咋地,FillForegroundColor設置完了沒有改變其實際的rgb的值,需要另外處理一下才行(具體根據單元格的index存下來,讓我們知道這個單元格是我們自定義的顏色),但是03的版本修改完FillForegroundColor這個值,rgb就直接變成了8號位對應的顏色
如果是03的版本:
if (cell.CellStyle.FillForegroundColor == 55)
{
cell.CellStyle.FillForegroundColor = (short)(8);
}
過多的還沒有探討,有感興趣的,留言一起探討探討
————————————————
版權聲明:本文為CSDN博主「雪落花開_chanel」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/chanelwtt/article/details/105099584