Java Jasper和.xlsx无法读取的内容消息

Java Jasper和.xlsx无法读取的内容消息,java,stream,jasper-reports,xlsx,Java,Stream,Jasper Reports,Xlsx,我有以下将xlsx导出到流的代码。它工作正常,我得到了xlsx文件,但它说excel在“…”中发现了不可读的内容,并询问我是否要恢复工作簿的内容。当我这样做的时候,我得到了xlsx文件,其中包含正确的数据,在正确的位置,正如我所希望的那样。我如何避免或消除这个错误 try { ServletOutputStream servletOutputStream = resp.getOutputStream(); JasperReport jasperReport = J

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

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

最后,我尝试关闭了我的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 {
    

    如果在ireport中进行设计,您可以在报表属性(右键单击报表检查器中最顶端的节点)中进行设置,或者在根元素中添加属性,就像我使用JasperSoft Studio,在我的属性中有“when do data type->Blank page”一样我想你可以把它改成其他值,比如“No Data Section”。看,我也试过了。我尝试了以下选项:无页面、空白页面、所有部分、无详细信息和无数据部分。您的意思是如果,如果我没有数据,您不需要指定条件。当报表行数为零时,NoData节将打印,而不是打印所有其他栏位。我在无数据类型时选择空白页,但在无数据属性时报表中仍然遇到相同的问题您应该指定无数据节,然后启用无数据栏位。