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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM