[英]JasperReports export to xlsx, not xls
我在JasperReports 4.1.1中找不到如何在.xlsx中导出文件。 班级:
JRXlsExporter
没有Xlsx等效项。 而且我找不到参数来设置从xls到xlsx的输出格式。
JRXlsxExporter类应用于以XLSX格式导出。
直到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)方法。
在此示例中,我使用了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出口。
这个答案是为了帮助JASPER REPORT VERSION> 5.6 (最新版本)的用户,因此删除不推荐使用的代码。
在JRXlsxExporter.setParameter(..)
5.6版中, deprecated
JRXlsxExporter.setParameter(..)
。
你应该用
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();
您需要做的就是将格式放在请求路径中,如下所示:
@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 );
}
JasperReports 4.5和更高版本中提供了JRXlsExporter。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.