我们有一份报告,客户希望将其导出为具有多个工作表的Excel格式。基本上这两个查询共享相同的参数,但其他一切都不相同。如何将JasperReport导出为包含多个工作表的Excel文件?
在jasper-reports中,如何导出到具有多个工作表(理想情况下来自不同数据源)的excel文件?
我们有一份报告,客户希望将其导出为具有多个工作表的Excel格式。基本上这两个查询共享相同的参数,但其他一切都不相同。如何将JasperReport导出为包含多个工作表的Excel文件?
在jasper-reports中,如何导出到具有多个工作表(理想情况下来自不同数据源)的excel文件?
感谢这个线程,我真的更容易创建一个带有多个工作表的Excel导出。我发现了什么是你可以使用以下命令:
ArrayList<JasperPrint> list = new ArrayList<JasperPrint>();
list.add(jp1); list.add(jp2);
exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT_LIST, list);
商和出口商将自动使用每JasperPrint对象构造每个片; Jasper报告的名称(如jrxml文件中指定的)用作每张表的名称。
目前这个解决方案适用于我的本地项目,所以我只是想让你知道。
感谢belisarius链接,我们似乎已经想通了。如何做到这一点的基础知识就是像平常一样为每张纸创建您的JasperPrint对象。所以你有:
JasperPrint firstWorkSheet = ...;
JasperPrint secondWorkSheet = ...;
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++;
}
这做什么它设置i
到目前在firstWorkSheet
页面(这应该是一个)的数量。然后循环使用secondWorkSheet
中的页面,并将它们添加到firstWorkSheet中。
请确保您在jasperReport中设置为打印为每个工作表jrxml文件的一个页面,并且您应该很好。如果有任何更改,我会更新此内容,但这应该起作用。
UPDATE:
发现你需要使用的 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,以便将每个页面分解为单独的工作表。
+1为了让您的时间帮助其他人 – 2010-10-20 14:47:11
+1对我有帮助谢谢。 – Addicted 2012-07-11 12:05:44
根据当前版本6.1.1,不推荐使用JRXlsExporter.setParameter
。它应该被JRXlsExporter.setExporterInput
取代。所以,更新后的代码应该是:
ArrayList<JasperPrint> sheets = new ArrayList<JasperPrint>();
sheets.add(sheet1);
sheets.add(sheet2);
exporter.setExporterInput(SimpleExporterInput.getInstance(sheets));
我使用JRXlsExporterParameter.SHEET_NAMES命名表单,但名称在表单选项卡上不合适。使用上面的代码将名称与正确的工作表相匹配。谢谢+1 – 2012-01-06 19:14:30
+1不错的答案。谢谢 – Addicted 2012-07-10 11:10:53
考虑更新您的答案JRXlsExporter.setParameter已弃用 – 2015-12-02 17:16:37