13

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

JRXlsExporter

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

4

4 回答 4

26

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);
}

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


更多信息

于 2011-11-03T05:54:52.093 回答
18

这个答案是为了帮助使用JASPER REPORT VERSION >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();
于 2015-12-08T14:53:53.143 回答
2

您需要做的就是将格式放入请求路径中,如下所示:

@RequestMapping( value = "/ActivityReport.xlsx", method = RequestMethod.GET )
public ModelAndView generateActivityReportXLS( HttpServletRequest request, HttpServletResponse response ) {


    List<ActivityDisplay> list = activityManager.listActivities();

    Map<String, Object> parameterMap = new HashMap<>();
    parameterMap.put( "datasource", new JRBeanCollectionDataSource( list ) );
    return new ModelAndView( "activitiesXLSView", parameterMap );
}
于 2014-08-15T02:24:31.170 回答
0

JRXlsExporter 在 JasperReports 4.5 及更高版本中可用。

于 2014-01-03T04:00:54.363 回答