2

我们正在使用 Jasper Report 6.1.0 或 5.6.0 jar,但无法找到任何答案

JasperPrint jasperPrint=JasperFillManager.fillReport(sourceFileName, parameters, new JREmptyDataSource());
System.out.println("started bossssssssssssssssss");
JRDocxExporter exporter = new JRDocxExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
File exportReportFile = new File("/home/ist-140/filename.docx");
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(exportReportFile));
    // exporter.setParameter(JRDocxExporterParameter.JASPER_PRINT, jasperPrint);
exporter.exportReport(); 

错误是:

net.sf.jasperreports.engine.JRException: The DOCX format does not support more than 63 columns in a table

对于一个表的 63 列限制,下列哪项是正确的:

  • 它是文件格式/规范的限制
  • 它在某些/所有版本的 Word 中存在限制
  • 这是 Jasper 的限制
4

5 回答 5

2

这个JasperReports引擎在JRDocxExporter的帮助下在导出期间执行检查。如果有超过63列,则会引发异常。

如您所见,此代码在JRDocxExporter类的exportGrid方法中执行检查:

protected void exportGrid(JRGridLayout gridLayout, JRPrintElementIndex frameIndex) throws JRException {
    CutsInfo xCuts = gridLayout.getXCuts();
    Grid grid = gridLayout.getGrid();
    DocxTableHelper tableHelper = null;

    int rowCount = grid.getRowCount();
    if (rowCount > 0 && grid.getColumnCount() > 63)     {
        throw new JRException(EXCEPTION_MESSAGE_KEY_COLUMN_COUNT_OUT_OF_RANGE,  
                new Object[]{grid.getColumnCount()} 
                ); 
    }

这是JR 6.3.0的一个实现片段。


更多信息

  1. 此实现的根源是MS Word的限制。可以在此处找到有关此限制的一些信息:表格列限制及其计算方式

  2. Teodor Danciu对问题的解释可以在这里找到

  3. 当前版本的JRDocxExporter类的源代码在这里

于 2018-11-02T21:48:45.280 回答
1

导出到 DOCX 时,会生成一个网格,每个打印元素都放置在一个单元格中。因此,当有太多未对齐的元素时,列数可能会大于 docx 规范限制。

部分解决方法是在网格中设计报告思维(如电子表格)。看:

http://community.jaspersoft.com/questions/531205/exceptions-when-saving-report-docx-format

于 2017-07-28T14:40:47.193 回答
0

Word 表确实限制为 63 列。如果您需要更多,请插入 Excel 工作表并使用它,记住嵌入式工作表不能跨越分页符;否则,您可以使用合适的链接格式链接到外部 Excel 工作簿,这样您就可以跨越分页符。

于 2018-11-02T20:49:52.327 回答
0

它是某些/所有版本的 Word 的限制(我会说它是所有版本的限制)由于 MS Word 有这个限制,Jasper(实际上是 JasperReports docx 导出器)有这个限制。否则,它将在第 63 列中写入第 64 列和下一列。

打开excel,写65个单元格,复制粘贴到word中,添加一些边框,看看第63个单元格/列有第63、64和65个内容。

于 2018-05-09T11:36:17.740 回答
0

是的,Word 确实对表格的列数有上限。原因很实际:页面/纸张大小有上限。具有更多列的表根本不可读。

此限制适用于所有版本的 Word。在非常早期的版本中,甚至可以使用更少的列。

于 2016-04-30T22:48:48.080 回答