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将生成的单元格样式缓存起来,若是遇到一样的单元格样式,则不重复建立,直接从缓存里取。队列