You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jasper Reports 6.17.0生成的XLSX文件打开报错求助

Jasper Reports生成XLSX文件打开报错的原因及解决办法

生成的.XLSX文件打开时弹出报错提示:我们在'DetailedQuoteReport ISX003178-001.xlsx'中发现部分内容存在问题。是否尝试尽可能恢复内容?若信任此工作簿来源,请点击‘是’。
PDF、Word及.XLS文件均可正常生成并打开,点击“是”后XLSX文件可正常打开。
使用版本:Jasper 6.17.0、Dynamic Jasper 5.3.3、POI 5.2.0、poi-ooxml及ooxml-schemas 1.4
生成Excel的代码如下:

public ByteArrayOutputStream export(JasperPrint jp) {
    Exporter exporter = new JRXlsxExporter();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    // Here we assign the parameters jp and baos to the exporter
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jp);
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
    if (ReportOutputType.XLS.equals(reportOutputType) || ReportOutputType.XLSX.equals(reportOutputType)) {
        exporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);
        exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
        exporter.setParameter(JRXlsExporterParameter.IS_IGNORE_GRAPHICS, Boolean.FALSE);
        exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS, Boolean.TRUE);
        exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
        exporter.setParameter(JRXlsExporterParameter.IS_COLLAPSE_ROW_SPAN, Boolean.TRUE);
        exporter.setParameter(JRXlsExporterParameter.IS_FONT_SIZE_FIX_ENABLED, Boolean.TRUE);
        exporter.setParameter(JRXlsExporterParameter.IS_IGNORE_CELL_BORDER, Boolean.TRUE);
         
    }

    try {
        exporter.exportReport();

    } catch (JRException e) {
        throw new RuntimeException(e);
    }

    return baos;
}

可能的原因

  • POI版本兼容性问题:Jasper 6.17.0默认适配的POI版本与你使用的5.2.0不匹配,生成的XLSX文件存在格式细微错误。
  • 导出参数混用问题:对XLSX格式使用了JRXlsExporterParameter参数,部分参数在XLSX下不兼容,引发格式校验报错。
  • 组件版本适配问题:Dynamic Jasper 5.3.3与Jasper 6.17.0的组合存在未适配细节,导致XLSX生成过程中出现异常。

解决办法

1. 对齐POI版本至Jasper官方推荐版本

Jasper Reports 6.17.0官方推荐使用POI 4.1.2版本,替换你的POI依赖:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>

同时移除ooxml-schemas依赖,POI 4.1.2已内置相关schema支持。

2. 区分XLS和XLSX的导出参数

XLSX导出应使用专属的JRXlsxExporterParameter,修改代码参数逻辑:

if (ReportOutputType.XLS.equals(reportOutputType)) {
    // XLS格式使用JRXlsExporterParameter
    exporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);
    // 其他XLS专属参数...
} else if (ReportOutputType.XLSX.equals(reportOutputType)) {
    // XLSX格式使用JRXlsxExporterParameter
    exporter.setParameter(JRXlsxExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);
    exporter.setParameter(JRXlsxExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
    exporter.setParameter(JRXlsxExporterParameter.IS_IGNORE_GRAPHICS, Boolean.FALSE);
    exporter.setParameter(JRXlsxExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS, Boolean.TRUE);
    exporter.setParameter(JRXlsxExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
    exporter.setParameter(JRXlsxExporterParameter.IS_COLLAPSE_ROW_SPAN, Boolean.TRUE);
    exporter.setParameter(JRXlsxExporterParameter.IS_FONT_SIZE_FIX_ENABLED, Boolean.TRUE);
    exporter.setParameter(JRXlsxExporterParameter.IS_IGNORE_CELL_BORDER, Boolean.TRUE);
}

3. 升级Dynamic Jasper版本

更换为适配Jasper 6.17.0的Dynamic Jasper版本(如6.x系列),确保组件间版本兼容。

4. 排查并禁用冲突参数

尝试逐步移除部分参数(如IS_COLLAPSE_ROW_SPAN、IS_FONT_SIZE_FIX_ENABLED),定位是否由特定参数引发格式错误。

内容的提问来源于stack exchange,提问作者Ruchi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 12:42:28