NPOI 生成Excel后打开EXCEL弹出“此文件中某些文本格式可能已经更改,因为它已经超出最多允许的字体数。关闭其他文档再试一次可能有用

利用NPOI 导出Excel 文件后,当用Excel 工具打开后,会提示     “此文件中某些文本格式可能已经更改,因为它已经超出最多允许的字体数。关闭其他文档再试一次可能有用”  ,当生成的内容很少是不会提示该错误,当生成多个sheet (220个)就会造成后面单元格样式全部丢失。 解决方法如下: 

   下面的代码是:每一次生成一个sheet 的时候就会重新创建一个CellStyle ,当然了程序里不止创建一个cellStyle, 而且标题栏目,列表头等需要创建cellStyle,我在这只是把问题给说明。下面的代码是有问题,等于说生成一个sheet我要创建一个CellStyle,生成多个Sheet 我要创建多个CellStyle,个人感觉Excel 应该对CellStyle 有个数限制的。

       /// <summary>
        /// 创建单元格样式
        /// </summary>
        /// <param name="wb"></param>
        /// <returns></returns>
        public virtual ICellStyle CreateContentEvenRowCellStyle(IWorkbook wb)
        {
                ///创建单元格样式
                ICellStyle cellStyle = wb.CreateCellStyle();
                cellStyle.BorderTop = BorderStyle.Thin;
                cellStyle.BorderLeft = BorderStyle.Thin;
                cellStyle.BorderRight = BorderStyle.Thin;
                cellStyle.BorderBottom = BorderStyle.Thin;

                //水平对齐
                cellStyle.Alignment = HorizontalAlignment.Left;
                cellStyle.VerticalAlignment = VerticalAlignment.Center;


                设置字体
                IFont font = wb.CreateFont();
                font.FontHeightInPoints = 12;
                font.FontName = "宋体";
                cellStyle.SetFont(font);
                cellStyle.WrapText = true;
                DataEvenRowCellStyle = cellStyle;
                return cellStyle;
        }

 

解决方法如下: 定义一个成员变量,来保证一个WorkBook 只生成一个CellStyle,如果格式不一样那可以生成多个CellStyle,但是每个类别的CellStyle尽量唯一。

        /// <summary>
        /// 数据偶数行表格数据
        /// </summary>
        private  ICellStyle DataEvenRowCellStyle = null;

 

        /// <summary>
        /// 创建单元格样式
        /// </summary>
        /// <param name="wb"></param>
        /// <returns></returns>
        public virtual ICellStyle CreateContentEvenRowCellStyle(IWorkbook wb)
        {
            if (DataEvenRowCellStyle == null)
            {

                ///创建单元格样式
                ICellStyle cellStyle = wb.CreateCellStyle();
                cellStyle.BorderTop = BorderStyle.Thin;
                cellStyle.BorderLeft = BorderStyle.Thin;
                cellStyle.BorderRight = BorderStyle.Thin;
                cellStyle.BorderBottom = BorderStyle.Thin;

                //水平对齐
                cellStyle.Alignment = HorizontalAlignment.Left;
                cellStyle.VerticalAlignment = VerticalAlignment.Center;


                设置字体
                IFont font = wb.CreateFont();
                font.FontHeightInPoints = 12;
                font.FontName = "宋体";
                cellStyle.SetFont(font);
                cellStyle.WrapText = true;
                DataEvenRowCellStyle = cellStyle;
                return cellStyle;
            }
            else
            {
                return DataEvenRowCellStyle;
            }

        }

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值