zoukankan      html  css  js  c++  java
  • 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将生成的单元格样式缓存起来,如果遇到同样的单元格样式,则不重复创建,直接从缓存里取。

    
    
    
  • 相关阅读:
    c++ 析构函数
    define 全局变量 extern
    C 与 python 的随机数
    WinMain function can not be oveloaderd
    宽字符编码与多字节编码
    windows 静态库 与 动态库
    extern C 语言中
    ubuntu 修改分辨率 , 虚拟机中的ubuntu联网
    main(int argv, char* argc[])
    数字分隔符,三位一个逗号
  • 原文地址:https://www.cnblogs.com/xbzsz/p/8052790.html
Copyright © 2011-2022 走看看