解决ExcelReport导出Excel报Number of rules must not exceed 3错误的问题
报错信息:
Number of rules must not exceed 3
[ArgumentException: Number of rules must not exceed 3]
NPOI.XSSF.UserModel.XSSFSheetConditionalFormatting.AddConditionalFormatting(CellRangeAddress[] regions, IConditionalFormattingRule[] cfRules) +870
NPOI.Extend.SheetExtend.CopyRows(ISheet sheet, Int32 startRowIndex, Int32 endRowIndex) +620
ExcelReport.SheetAdapter.CopyRow(Int32 rowIndex, Action processTemplate) +37
ExcelReport.TableFormatter`1.Format(SheetAdapter sheetAdapter) +485
ExcelReport.SheetFormatter.Format(IWorkbook workbook) +225
ExcelReport.Export.ExportToBuffer(String templateFile, SheetFormatter[] sheetFormatters) +46
ExcelReport.ExportHelper.ExportToWeb(String templateFile, String targetFile, SheetFormatter[] sheetFormatters) +294 使用源代码进行调试发现错误原因在于ExcelReport调用的NPOI.Extend这个拓展的问题
有问题的方法:CellExtend类下的AddConditionalFormattingRules方法


cell.Sheet.SheetConditionalFormatting.AddConditionalFormatting(regions, cfrs); 该方法的cfrs数组最大长度只能支持3个条件格式规则
可以改为循环添加条件格式规则或者按长度判断,长度大于3则循环添加
原方法:
/// <summary>
/// 添加条件格式规则
/// </summary>
/// <param name="cell">单元格</param>
/// <param name="cfrs">条件格式规则</param>
public static void AddConditionalFormattingRules(this ICell cell, IConditionalFormattingRule[] cfrs)
{
CellRangeAddress[] regions =
{
new CellRangeAddress(cell.RowIndex, cell.RowIndex, cell.ColumnIndex, cell.ColumnIndex)
};
cell.Sheet.SheetConditionalFormatting.AddConditionalFormatting(regions, cfrs);
}
更改后的方法:
#region 1.0 添加条件格式规则
/// <summary>
/// 添加条件格式规则
/// </summary>
/// <param name="cell">单元格</param>
/// <param name="cfrs">条件格式规则</param>
public static void AddConditionalFormattingRules(this ICell cell, IConditionalFormattingRule[] cfrs)
{
CellRangeAddress[] regions =
{
new CellRangeAddress(cell.RowIndex, cell.RowIndex, cell.ColumnIndex, cell.ColumnIndex)
};
if (cfrs.Length <= )
{
cell.Sheet.SheetConditionalFormatting.AddConditionalFormatting(regions, cfrs);
}
else
{
foreach (var item in cfrs)
{
cell.Sheet.SheetConditionalFormatting.AddConditionalFormatting(regions, item);
}
}
}
NPOI.Extend版本:1.0.3
ExcelReport版本:2.0.1
解决ExcelReport导出Excel报Number of rules must not exceed 3错误的问题的更多相关文章
- java导出excel报错:getOutputStream() has already been called for this response
对于java导出excel报错的问题,查了很多都说是在使用完输出流以后调用以下两行代码即可 out.clear(); out = pageContext.pushBody(); 但这也许是页面上输出时 ...
- ExcelReport第一篇:使用ExcelReport导出Excel
导航 目 录:基于NPOI的报表引擎——ExcelReport 下一篇:ExcelReport源码解析 概述 本篇将通过导出学生成绩的示例演示“使用ExcelReport导出Excel”的步骤. ...
- weblogic 12c下jxls导出excel报错Could not initialize class org.apache.poi.xssf.usermodel.XSSFVMLDrawing
周一,开发反馈weblogic 12c下jxls导出excel报错,公司环境和UAT环境均报错,看日志如下: 2016-06-08 09:16:55,825 ERROR org.jxls.util.T ...
- 解决C#导出excel异常来自 HRESULT:0x800A03EC的方法 .
解决C#导出excel异常来自 HRESULT:0x800A03EC的方法 . xlBook.SaveAs(FilePath,Microsoft.Office.Interop.Excel.XlFi ...
- .net解决数据导出excel时的格式问题
在项目中一般都需要将报表数据导出到EXCEL中,但经常出现导出长串数据(如身份证)到EXCEL中后显示为科学计数法的格式,或者报表中显示为001的数据导出到Excel后成了1的格式. 下面简单介绍一下 ...
- 解决poi导出Excel异常org.openxmlformats.schemas.spreadshe
JAVA报表 POI未捕获到 servlet OUTEXCEL 的其中一个服务方法中抛出的异常.抛出的异常:java.lang.NoClassDefFoundError: org.openxmlfor ...
- 解决HTML导出Excel表数字变成科学计数法
- js 中导出excel 较长数字串会变成科学计数法 在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串转 ...
- NPOI导出EXCEL报_服务器无法在发送 HTTP 标头之后追加标头
虽然发表了2篇关于NPOI导出EXCEL的文章,但是最近再次使用的时候,把以前的代码粘贴过来,居然报了一个错误: “服务器无法在发送 HTTP 标头之后追加标头” 后来也查询了很多其他同学的文章,都没 ...
- java解决poi导出excel文字水印,导出excel不可操作问题
首先需求是用户提出导出excel数据需使用水印备注其用途: 其实就是在导出excel的同时带有自定义文字水印的导出. 那么我们首先想到的肯定是以一个什么样的思路去解决该问题,首先查找poi导出exce ...
随机推荐
- centos go 安装 使用
#goland 确保能ping通百度[root@z my_project]# vi /etc/resolv.conf# Generated by NetworkManagersearch locald ...
- golang 递归自己,输出自己的源代码
问题: [2min 大家自己想想] 一个程序P运行后能否输出自己的源代码?并且格式保持一致(换行.空格等) 思考: 这个问题的本质是一个递归问题,设有P运行后生成G 既P->G &&am ...
- MySql安装后在服务管理器里边找不到MySql服务项的解决办法(win10)
问题描述: 成功安装MySql后,使用mysql的时候,在CMD中输入net start mysql,提示服务名无效,查看服务列表也找不到mysql服务. 解决办法: 首先用管理员身份打开CMD命令, ...
- 《java多线程——线程简介与其创建(1)》
Java 给多线程编程提供了内置的支持. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 多线程是多任务的一种特别的形式,但多线程使用了更小的资源开 ...
- SparkStreaming支持的业务场景
目前而言SparkStreaming 主要支持以下三种业务场景: ➢ 无状态操作:只关注当前的DStream中的实时数据.例如:只对当前DStream中的数据做正确性校验.(下一条与上一条数据无关) ...
- Kubernetes 实战-Operator Finalizers 实现
原文链接:https://zdyxry.github.io/2019/09/13/Kubernetes-%E5%AE%9E%E6%88%98-Operator-Finalizers/ Finalize ...
- Windows如何快速远程到另一台Windows并管理多个远程服务器
Windows如何远程到另一台 Windows管理多个远程服务器 Windows第三方远程管理工具 准备远程机器 开启远程机器的远程桌面功能 首先在此电脑(我的电脑)图标上点击鼠标右键,选择" ...
- vimrc备份
备份一下我的 gvim 配置文件 " 使vimrc文件立马生效 autocmd BufWritePost $MYVIMRC source $MYVIMRC " 设置自己的Leade ...
- DVWA之文件上传(一)
实验环境为三台虚拟机,网络互通,分别是: 1.kali,IP为192.168.230.131 2.win10,IP为192.168.230.142 3.server 2019,IP为192.168.2 ...
- OGG复制同步,提示字段长度不够ORA-01704
日常运维OGG的环境中,如果遇到复制进程报错,提示字段长度不足如何处理??? 正常情况下,字段长度不足,但是未达到Oracle的限制时,可以对字段进行扩大限制满足目的. 实际环境中,遇到源端GBK,目 ...