使用Jasper和.xlsx的内容消息不可读

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

[UPDATE]尝试当没有数据类型时,以下选项没有页面,空白页面,所有部分没有详细信息和没有数据部分它们都没有工作

还试着在我的web.xml中添加东西

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

终于尝试关闭我的outStream,它也没有用,excel仍然说不可读的内容

我遇到了与XLSX(但不是xls)导出器相同的问题

  1. 没有数据时,报告不会打印任何页面
  2. 数据列表为空。

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

这意味着该报告没有数据。 要修复错误的文件消息,只需使用有意义的消息将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 {