如何从 jasper 报告导出到 excel 中的多个工作表
How to export to multiple sheets in excel from jasper report
我正在使用 iReport 处理一个包含许多子报表的报表。
从我的应用程序生成报告时,我想在 excel 文件中包含另外两个 sheet。
在网上搜索时,我找到了有关在报告中创建中断的答案,在子报告 "true" 中有选项 "Ignore pagination " ,但我仍然不清楚。
我有哪些选项可以控制如何以及何时创建新 sheet
在 jasper 报告中,在 jrxml
和 java
代码中有不同的方法来实现新的 sheet。默认行为是为每个页面创建一个新的 sheet。我将说明 3 种最常见的使用方法,但在使用时会遇到相关问题。
Ignore pagination and break element
方法
在 jasperReport
标签上设置 isIgnorePagination="true"
并添加
<break>
<reportElement x="0" y="0" width="100" height="1" uuid="c5371aa4-2eb4-4ab9-8cae-39f50da3317b"/>
</break>
当你需要一个新的 sheet。
问题:如果您也导出为 pdf 报告将不美观(因为它忽略了分页)
Use the jrxml properties
方法
为避免在每个新页面上创建新的 sheet,请设置 属性
net.sf.jasperreports.export.xls.one.page.per.sheet="false"
并且当您希望它在 reportElement
之前或之后创建一个新的 sheet 添加相对 属性:
net.sf.jasperreports.export.xls.break.before.row="true"
net.sf.jasperreports.export.xls.break.after.row="true"
问题:每个 sheet 上的列都是相同的,这会导致不同 sheet 上的难看的 colspan
Use java and controll the sheet's as you like (loading different reports)
方法
List<JasperPrint> sheets = new ArrayList<JasperPrint>();
for (int i=1;i<=8;i++){
JasperPrint print = JasperFillManager.fillReport("subReport_" + i + ".jasper", paramMap, connection);
sheets.add(print);
}
JRXlsxExporter exporter = new JRXlsxExporter();
exporter.setExporterInput(SimpleExporterInput.getInstance(sheets));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(new File("text.xlxs"));
SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration();
configuration.setSheetNames(sheetNames): //sheets names is an array of the different names.
configuration.setOnePagePerSheet(false); //remove that it break on new page
configuration.setDetectCellType(true);
exporter.setConfiguration(configuration);
exporter.exportReport();
问题:如果您使用的是jasper report server,则不能使用此方法。
我正在使用 iReport 处理一个包含许多子报表的报表。
从我的应用程序生成报告时,我想在 excel 文件中包含另外两个 sheet。
在网上搜索时,我找到了有关在报告中创建中断的答案,在子报告 "true" 中有选项 "Ignore pagination " ,但我仍然不清楚。
我有哪些选项可以控制如何以及何时创建新 sheet
在 jasper 报告中,在 jrxml
和 java
代码中有不同的方法来实现新的 sheet。默认行为是为每个页面创建一个新的 sheet。我将说明 3 种最常见的使用方法,但在使用时会遇到相关问题。
Ignore pagination and break element
方法
在 jasperReport
标签上设置 isIgnorePagination="true"
并添加
<break>
<reportElement x="0" y="0" width="100" height="1" uuid="c5371aa4-2eb4-4ab9-8cae-39f50da3317b"/>
</break>
当你需要一个新的 sheet。
问题:如果您也导出为 pdf 报告将不美观(因为它忽略了分页)
Use the jrxml properties
方法 为避免在每个新页面上创建新的 sheet,请设置 属性
net.sf.jasperreports.export.xls.one.page.per.sheet="false"
并且当您希望它在 reportElement
之前或之后创建一个新的 sheet 添加相对 属性:
net.sf.jasperreports.export.xls.break.before.row="true"
net.sf.jasperreports.export.xls.break.after.row="true"
问题:每个 sheet 上的列都是相同的,这会导致不同 sheet 上的难看的 colspan
Use java and controll the sheet's as you like (loading different reports)
方法
List<JasperPrint> sheets = new ArrayList<JasperPrint>();
for (int i=1;i<=8;i++){
JasperPrint print = JasperFillManager.fillReport("subReport_" + i + ".jasper", paramMap, connection);
sheets.add(print);
}
JRXlsxExporter exporter = new JRXlsxExporter();
exporter.setExporterInput(SimpleExporterInput.getInstance(sheets));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(new File("text.xlxs"));
SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration();
configuration.setSheetNames(sheetNames): //sheets names is an array of the different names.
configuration.setOnePagePerSheet(false); //remove that it break on new page
configuration.setDetectCellType(true);
exporter.setConfiguration(configuration);
exporter.exportReport();
问题:如果您使用的是jasper report server,则不能使用此方法。