JasperReports导出到xlsx,而不是xls

时间:2011-08-30 14:40:07

标签: java jasper-reports xls xlsx

我无法在JasperReports 4.1.1中找到如何在.xlsx中导出文件。 上课:

JRXlsExporter

没有Xlsx等价物。我找不到一个参数来设置从xls到xlsx的输出格式。

4 个答案:

答案 0 :(得分:17)

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 导出器的设置。


更多信息

答案 1 :(得分:14)

  

此答案旨在帮助用户使用 JASPER REPORT VERSION&gt; 5.6 (最新版本),从而删除已弃用的代码。

在更高版本&gt; 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();

答案 2 :(得分: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 );
}

答案 3 :(得分:0)

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