有些自定义的颜色,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