如何将JasperReport导出到包含多个工作表的Excel文件?

Jac*_*oen 17 excel export jasper-reports

我们有一份报告称客户希望将其导出为具有多个工作表的Excel格式.本质上,这两个查询共享相同的参数,但其他一切都不同.

在jasper-reports中如何导出到包含多个工作表的excel文件(理想情况下来自不同的数据源)?

小智 20

感谢这个帖子,我真的更容易创建一个包含多个工作表的Excel导出.我发现你可以使用以下内容:

ArrayList<JasperPrint> list = new  ArrayList<JasperPrint>();
list.add(jp1); list.add(jp2);
exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT_LIST, list);
Run Code Online (Sandbox Code Playgroud)

并且导出器将自动使用每个JasperPrint对象来构造每个工作表; Jasper报告的名称(在jrxml文件中指定)也用作每个工作表的名称.

目前这个解决方案适用于我的本地项目,所以我只是想让你知道.


Jac*_*oen 11

感谢belisarius链接我们似乎已经弄明白了.如何操作的基础是像往常一样为每张纸创建JasperPrint对象.所以你有了:

JasperPrint firstWorkSheet = ...;
JasperPrint secondWorkSheet = ...;
Run Code Online (Sandbox Code Playgroud)

此时JasperPrint对象已经填充了数据源.然后你做:

List<JRPrintPage> pages = new ArrayList<JRPrintPage>(secondWorkSheet.getPages());
int i = firstWorkSheet.getPages().size();
for (int count = 0; count < pages.size(); count++) {
    firstWorkSheet.addPage(i, (JRPrintPage) pages.get(count));
    i++;
}
Run Code Online (Sandbox Code Playgroud)

这是什么设置i当前的页面数firstWorkSheet(应该是一个).然后它循环secondWorkSheet遍历页面并将它们添加到firstWorkSheet.

确保你在jasperReport中将它设置为每个工作表jrxml文件的一个页面打印,你应该很高兴.如果有任何变化,我会更新这个,但这应该有效.

更新:

发现你需要使用 net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter

代替

net.sf.jasperreports.engine.export.JRXlsExporter

因为导出到多个工作表时似乎存在问题.

isIgnorePagination需要在jrxml文件中设置:

isIgnorePagination="true"

这样每个jrxml文件都作为单个页面导出.

然后,您需要将JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET参数设置为true,以便将每个页面分成单独的工作表.