我有以下代码将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中

xlsx
application/vnd.openxmlformats-          officedocument.spreadsheetml.sheet

最终尝试关闭我的outStream也不起作用,excel仍然说内容不可读

这意味着该报告没有数据。 要修复错误的文件消息,只需将有意义的消息添加到报表的NoData部分即可。

你的意思是如果我没有数据的话

您无需指定条件。当报告行计数为零时,将打印NoData部分,而不显示所有其他波段。

我在没有数据类型的情况下选择了空白页,但仍然遇到相同的问题

在报告中的"无数据时"属性中,应指定"无数据段",然后启用"无数据段"。

我在使用XLSX(但不是xls)导出器时遇到相同的问题

没有数据时报告不打印页面

数据列表为空。

检查数据列表,并将报告设置为打印"无页面"以外的内容(例如,无数据部分或所有无详细信息的部分)。

没有数据时,我该如何打印除无页面以外的内容?

如果您要在ireport中进行设计,则可以在报表属性中进行设置(右键单击报表检查器中最顶层的节点),或在根元素中添加属性,例如

我正在使用JasperSoft Studio,并且在属性中有"何时输入数据类型->空白页"

我猜您可以将其更改为"无数据部分"之类的其他值。参见community.jaspersoft.com/questions/534461/how-use-no-data-band

我也尝试过。我尝试了以下选项:无页,空白页,所有部分,无详细信息和无数据部分

尝试这个

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 {