NPOI隨筆——單元格樣式CellStyle問題

  1、問題描述緩存

  使用NPOI根據設定好的Excel模板導出數據,有些單元格樣式須要根據數據的不一樣樣式也不同,所以在代碼裏會更改單元格樣式,代碼示例以下:spa

  ICellStyle CellStyle = null;
  string strDataFormat = "#,##0.00";//顯示千分位保留兩位小數
  IDataFormat formatNum = cell.Row.Sheet.Workbook.CreateDataFormat();
  formatNum = cell.Row.Sheet.Workbook.CreateDataFormat();
  CellStyle = cell.Row.Sheet.Workbook.CreateCellStyle();//建立單元格樣式
  CellStyle.CloneStyleFrom(cell.CellStyle);//複製單元格樣式
  CellStyle.DataFormat = formatNum.GetFormat(strDataFormat);//在原有樣式不變的基礎上,將單元格格式修改爲千分位保留兩位小數
  cell.CellStyle = CellStyle;

  如此導出以後出現的結果是有些單元格樣式不見了,以下圖所示:code

  

  2、問題分析orm

   致使出現這種單元格樣式不生效的緣由: 每一個單元格樣式都是使用新建立CreateCellStyle(),單元格樣式建立後會放到workbook隊列中維護,最多隻能建立4000個樣式,所以超過了就不會建立,後面的單元格就沒有樣式,前面的單元格樣式卻正常。blog

  解決方式:可使用集合Dictionary或List將生成的單元格樣式緩存起來,若是遇到一樣的單元格樣式,則不重複建立,直接從緩存裏取。隊列

相關文章
相關標籤/搜索