NPOI读取自定义的颜色

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

原文地址:https://www.cnblogs.com/zhuangjolon/p/12582394.html