我们有一份报告,客户希望将其导出为具有多个工作表的excel格式。本质上,这两个查询共享相同的参数,但其他一切都是不同的。
jasper中的-报告如何导出到包含多个工作表的excel文件(理想情况下来自不同的数据源)?
发布于 2011-04-26 19:51:09
多亏了这个线程,我可以更轻松地创建一个包含多张工作表的Excel导出。我发现您可以使用以下内容:
ArrayList<JasperPrint> list = new ArrayList<JasperPrint>();
list.add(jp1); list.add(jp2);
exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT_LIST, list);
导出器将自动使用每个JasperPrint对象来构造每个工作表;还将使用Jasper报告的名称(在jrxml文件中指定)作为每个工作表的名称。
目前这个解决方案在我的本地项目上有效,所以我只想让你知道。
发布于 2010-10-20 22:37:36
多亏了belisarius link,我们似乎找到了答案。它的基本方法是像往常一样为每个工作表创建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
中当前的页数(应该是1)。然后循环遍历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,以便将每页分解到单独的工作表中。
发布于 2015-10-22 17:02:31
根据当前版本6.1.1,JRXlsExporter.setParameter
已弃用。它应该被JRXlsExporter.setExporterInput
所取代。因此,更新后的代码将是:
ArrayList<JasperPrint> sheets = new ArrayList<JasperPrint>();
sheets.add(sheet1);
sheets.add(sheet2);
exporter.setExporterInput(SimpleExporterInput.getInstance(sheets));
https://stackoverflow.com/questions/3977658
复制相似问题