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

时间:2015-07-27 09:42:43

标签: java stream jasper-reports 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中添加东西

<mime-mapping>
<extension>xlsx</extension>
<mime-type>application/vnd.openxmlformats-          officedocument.spreadsheetml.sheet</mime-type>
</mime-mapping>

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

3 个答案:

答案 0 :(得分:1)

我在

时遇到了与XLSX(但不是xls)导出器相同的问题
  1. 当没有数据时,报告不打印任何页面
  2. 数据列表为空。
  3. 检查您的数据列表并将报告设置为打印“无页面”以外的内容(例如,没有数据部分或没有详细信息的所有部分)。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

试试这个

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 {