DOCX在表中不支持超过63列?

时间:2016-04-28 16:57:51

标签: java ms-word jasper-reports export-to-word

我们正在使用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中的限制
  • 是贾斯珀的限制

5 个答案:

答案 0 :(得分:1)

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 的限制。 有关此限制的一些信息可以在这里找到:Table column limit and how this is calculated

  2. Teodor Danciu 对问题的解释可以找到here

  3. JRDocxExporter 类的当前版本的源代码为here

答案 1 :(得分:0)

是的,Word确实有一个表的列数上限。原因很实用:页面/纸张大小有一个上限。包含更多列的表格根本无法读取。

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

答案 2 :(得分:0)

  

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

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

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

答案 3 :(得分:0)

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

打开excel,写入65个单元格,复制它们并将它们粘贴到单词中,添加一些边框并查看第63个单元格/ colum如何具有第63,64和65个内容。

答案 4 :(得分:0)

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