JasperReports export to xlsx, not xls

2022-09-03 08:51:17

我在JasperReports 4.1.1中找不到如何在.xlsx导出文件。课程:

JRXlsExporter

没有 Xlsx 等效项。而且我找不到将输出格式从xls设置为xlsx的参数。


答案 1

JRXlsxExporter 类应用于以 XLSX 格式导出。

在 JasperReports 5.5.2 之前的版本中使用导出器的示例

直到 JasperReports 5.5.1,此代码可用于生成 xlsx 格式的报告:

JRMapArrayDataSource dataSource = new JRMapArrayDataSource(data);

JasperReport jasperReport = JasperCompileManager.compileReport(reportJRXMLSource);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, dataSource);

JRXlsxExporter exporter = new JRXlsxExporter();
exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRXlsExporterParameter.OUTPUT_FILE_NAME, outputFileName);

exporter.exportReport();

5.5.2 版本的库开始,JRAbstractExporter.setParameter(JRExporterParameter, Object) 方法被弃用。

使用导出器与现代 JasperReports 版本的示例

在此示例中,我使用了 JRS 6.4.1 版本:

JasperReport jasperReport;
try (InputStream inputStream = JRLoader.getResourceInputStream(jrxmlFilePath)) {
    jasperReport = JasperCompileManager.compileReport(JRXmlLoader.load(inputStream));
}
Map<String, Object> params = new HashMap<>();

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, new JREmptyDataSource());

SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration();
configuration.setOnePagePerSheet(true);
configuration.setIgnoreGraphics(false);

File outputFile = new File("output.xlsx");
try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
     OutputStream fileOutputStream = new FileOutputStream(outputFile)) {
    Exporter exporter = new JRXlsxExporter();
    exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
    exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(byteArrayOutputStream));
    exporter.setConfiguration(configuration);
    exporter.exportReport();
    byteArrayOutputStream.writeTo(fileOutputStream);
}

而不是使用JRExporter.setParameter方法,我们必须使用XlsReportConfiguration接口的实现。在上面的例子中,我使用了SimpleXlsxReportConfiguration实现XlsReportConfiguration来定义特定于JRXlsxExporter导出器的设置。


更多信息


答案 2

这个答案是为了帮助用户使用JASPER REPORT版本>5.6(最新版本),因此删除已弃用的代码。

在更高版本的 >5.6 中,该版本是 .JRXlsxExporter.setParameter(..)deprecated

您应该使用

JRMapArrayDataSource dataSource = new JRMapArrayDataSource(data);

JasperReport jasperReport = JasperCompileManager.compileReport(reportJRXMLSource);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, dataSource);

JRXlsxExporter exporter = new JRXlsxExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
File outputFile = new File("excelTest.xlsx");
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputFile));
SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration(); 
configuration.setDetectCellType(true);//Set configuration as you like it!!
configuration.setCollapseRowSpan(false);
exporter.setConfiguration(configuration);
exporter.exportReport();

推荐