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

时间:2010-10-20 12:17:37

标签: excel export jasper-reports

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

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

3 个答案:

答案 0 :(得分:19)

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

ArrayList<JasperPrint> list = new  ArrayList<JasperPrint>();
list.add(jp1); list.add(jp2);
exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT_LIST, list);

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

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

答案 1 :(得分:10)

感谢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(应该是1)的页数。然后它循环遍历secondWorkSheet中的页面并将它们添加到第一个工作表。

请确保在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,以便将每个页面分成单独的工作表。

答案 2 :(得分:2)

根据当前版本6.1.1,不推荐使用JRXlsExporter.setParameter。它应该由JRXlsExporter.setExporterInput替换。因此,更新的代码将是:

ArrayList<JasperPrint> sheets = new ArrayList<JasperPrint>();
sheets.add(sheet1); 
sheets.add(sheet2);

exporter.setExporterInput(SimpleExporterInput.getInstance(sheets));