NPOI随笔——单元格样式CellStyle问题

  一、问题描述

  使用NPOI根据设定好的Excel模板导出数据,有些单元格样式需要根据数据的不同样式也不一样,因此在代码里会更改单元格样式,代码示例如下:

  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;

  如此导出之后出现的结果是有些单元格样式不见了,如下图所示:

  

  二、问题分析

   导致出现这种单元格样式不生效的原因: 每个单元格样式都是使用新创建CreateCellStyle(),单元格样式创建后会放到workbook队列中维护,最多只能创建4000个样式,因此超过了就不会创建,后面的单元格就没有样式,前面的单元格样式却正常。

  解决方式:可以使用集合Dictionary或List将生成的单元格样式缓存起来,如果遇到同样的单元格样式,则不重复创建,直接从缓存里取。

 
 

 

转载于:https://www.cnblogs.com/xbzsz/p/8052790.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值