【发布时间】:2013-02-08 02:00:27
【问题描述】:
每当我的交叉表报告的结果超过 702 列(ZZ 列)时,就会从 Excel 收到“不可读的内容”错误。当少于此列数时 - 没有错误。有限制吗? XLSX 应该可以处理 16,000 多列。
我们正在使用 JasperReports v4.0.1 和 POI 3.6。我已经尝试并使用 JasperReports v4.7 和 POI 3.7 重新创建了同样的问题。
感谢任何帮助或见解。
导出代码:
JRXlsxExporter xlsExporter = new JRXlsxExporter();
File fileP = new File(_workdir + report_name + ".jrprint");
JasperPrint jasperPrint = (JasperPrint)
JRLoader.loadObject(fileP);
xlsExporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
xlsExporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
xlsExporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);
xlsExporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
xlsExporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS, Boolean.TRUE);
xlsExporter.setParameter(JRXlsExporterParameter.IS_COLLAPSE_ROW_SPAN, Boolean.TRUE);
xlsExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
xlsExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, _outputName);
System.out.println("Exporting Excel Report to " + _outputName);
xlsExporter.exportReport();
System.out.println("Export Complete.");
【问题讨论】:
-
您收到任何错误吗?结果文件真的生成了吗?
-
另外,您可能希望提高 Jasper 的日志级别,以查看 POI 或 Jasper 本身是否抛出任何错误。
-
报告生成或导出期间没有错误。仅在尝试打开 Excel 文件本身时。该文件已创建,但它给出了一个不可读的内容错误,并且其中几乎没有实际数据。
-
我应该添加我们正在将输出写入文件,然后将文件通过电子邮件发送给请求者。这没有显示在浏览器中。
-
马特,简化您要完成的工作。 (1) 首先在 iReport 中导出到 XLSX。 (2) 从 JasperReports 教程中获取一个简单的示例。 (3) 增加复杂性,直到获得空/损坏的 Excel 文件。 (4) 看看能不能改用CSV格式——大部分老板应该想到“电子表格”的时候却想到了“Excel”;对于不需要格式化的输出,CSV 通常优于 XSLX。
标签: java jasper-reports xls xlsx