我有以下代码将xlsx导出到流。它工作,我得到xlsx文件,但它说excel发现不可读的内容在"…",并询问我是否要恢复工作簿的内容。当我这样做时,我在正确的位置获得了具有正确数据的xlsx文件,这是我想要的。如何避免或抑制此错误?
try {
ServletOutputStream servletOutputStream = resp.getOutputStream();
JasperReport jasperReport = JasperCompileManager
.compileReport(path
+ "Template/Instructions_with_CHGFOX_Template/testeXlsx2.jrxml");
JasperPrint print = JasperFillManager.fillReport(jasperReport,
parameters, new JRBeanCollectionDataSource(list));
JRXlsxExporter xlsxExporter = new JRXlsxExporter();
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
xlsxExporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
xlsxExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,
title + ".xlsx");
xlsxExporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
servletOutputStream);
xlsxExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outStream);
xlsxExporter.exportReport();
resp.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
resp.setHeader("Content-Disposition", "attachment; filename="
+ title + ".xlsx");
servletOutputStream.write(outStream.toByteArray());
resp.getOutputStream().write(outStream.toByteArray());
resp.getOutputStream().flush();
resp.getOutputStream().close();
resp.flushBuffer();
} catch (JRException e) {
e.printStackTrace();
}
使用JasperReports v4.7.1
(更新)当没有数据类型时尝试使用以下选项无页,空白页,所有部分没有细节和没有数据部分它们都不工作
也尝试添加东西到我的web.xml
<mime-mapping>
<extension>xlsx</extension>
<mime-type>application/vnd.openxmlformats- officedocument.spreadsheetml.sheet</mime-type>
</mime-mapping>
最后尝试关闭我的outStream,也没有工作,excel仍然显示不可读的内容
我在使用XLSX(但不是xls)导出器时遇到了同样的问题,
- 当没有数据时,报告不打印页面
- 数据列表为空
检查你的数据列表,并设置你的报告打印一些东西,而不是"没有页面"(例如,没有数据部分或所有部分没有细节)。
这意味着报告没有数据。要修复坏的文件消息,只需将NoData部分添加到报告中,并提供有意义的消息。
试试这个
if (reportType.equals("excel")) {
try {
ServletOutputStream servletOutputStream = resp
.getOutputStream();
JasperReport jasperReport = JasperCompileManager
.compileReport(path + "Template/" + template);
JasperPrint print = JasperFillManager.fillReport(jasperReport,
parameters, new JRBeanCollectionDataSource(list));
JRXlsxExporter exporter = new JRXlsxExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
ByteArrayOutputStream os = new ByteArrayOutputStream();
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, os);
exporter.exportReport();
resp.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
resp.setHeader("Content-Disposition", "attachment;filename="+ title + ".xlsx");
resp.getOutputStream().write(os.toByteArray());
resp.flushBuffer();
} catch (JRException e) {
e.printStackTrace();
}
} else {