4

我有一个要求,我必须在 JasperReports 中设计一个报告。报告有 4 张。第一张纸有 5 页,类似地其他纸有一页或两页。我面临的问题是,如果我使用net.sf.jasperreports.export.xls.one.page.per.sheet属性并将其设置为true,然后所有页面都出现在不同的工作表中。我需要以这样的方式设计报告,即某些页面将出现在同一张表中,而某些页面将出现在不同的表中。

是否有可能做到这一点?

4

1 回答 1

9

假设您有 4 个要批量导出的单独报告,那么在每个报告中您需要设置Ignore Paginationtrue(它是 jrxml 文件开头的 jasperReport 标记中的一个属性,该属性看起来像isIgnorePagination="true")。

要实际导出,它应该类似于以下内容:

List<JasperPrint> jasperPrintList = new ArrayList<JasperPrint>();
jasperPrintList.add(JasperFillManager.fillReport("report1.jasper", params1));
jasperPrintList.add(JasperFillManager.fillReport("report2.jasper", params2));
jasperPrintList.add(JasperFillManager.fillReport("report3.jasper", params3));
jasperPrintList.add(JasperFillManager.fillReport("report4.jasper", params4));

JRXlsExporter exporter = new JRXlsExporter();

exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "BatchExportReport.xls");
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);

exporter.exportReport();

要设置工作表名称,请查看JasperForge上的Dynamic Sheet Names示例。


根据您的评论,您希望使用相同的报告模板导出为多种格式。excel是唯一需要忽略分页的。您可以在运行时通过参数设置,而不是在报告中硬编码。因此,将以下内容添加到 params1、params2、params3 和 params4:

if(exportFormat == EXCEL) {
   params1.put(JRParameter.IS_IGNORE_PAGINATION, Boolean.TRUE);
   params2.put(JRParameter.IS_IGNORE_PAGINATION, Boolean.TRUE);
   params3.put(JRParameter.IS_IGNORE_PAGINATION, Boolean.TRUE);
   params4.put(JRParameter.IS_IGNORE_PAGINATION, Boolean.TRUE);
}
于 2012-05-25T13:42:19.217 回答