使用Apache POI在Excel中扩展现有表

时间:2018-10-18 15:12:26

标签: java excel apache-poi

我在excel中有一张表格,上面有我想向其中添加数据的公式。

table

我这样做的动机是,Excel中的表可以动态扩展到您添加到表中的数据范围,这意味着公式行自动跟上数据行的数量。

但是我很难确定是否可以使用apache-POI。

我要尝试的一件事(请参见下面的代码)是扩展表的AreaReference以覆盖数据,但是两个AreaReference(CR,CR2);(在this示例中使用)和AreaReference(CR,CR2, SpreadsheetVersion.EXCEL2007)(在Apache docs中看到)给出“构造函数未定义”。

不知道是什么导致了构造函数错误,因为我确实导入了org.apache.poi.ss.util

apache docs AreaReference(java.lang.String reference)上的另一个选项使我可以编译并运行,但会出现“ NoSuchMethod”错误。

        List<XSSFTable> tableList = spreadSheet.getTables();
        CellReference CR = new CellReference(0, 0); 
        CellReference CR2 = new CellReference(5, 2);
        AreaReference my_data_range = new AreaReference(CR,CR2);
        tableList.get(0).setArea(my_data_range);

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

到目前为止,使用apache poi的主要问题是,如果没有这样的Microsoft OfficeMicrosoft Office文件的存储的详细知识,就无法准备使用它。有很多事情还没准备好,在新版本中经常会有回归(错误再次出现,已经解决了)。

因此,您的要求:“仅使用apache poi不可能实现“使用Apache POI扩展Excel中的现有表”。必须知道Office Open XML文件*.xlsx只是可以解压缩的ZIP存档。解压缩后,我们发现/xl/tables/table1.xml用于存储表。我们可以将此XML进行分析并将其与使用XML的{​​{1}}创建的Excel进行比较。因此,我们可以找到由GUI的缺点引起的问题。与apache poi中工作表的XML相同。

我们还需要知道/xl/tables/sheet1.xml建立在apache poi的低级类上。由于ooxml-schemas的中途就绪,部分需要使用这些类。在下面的示例中,我们还需要apache poi,因为ooxml-schemas-1.4.jar的{​​{1}}到目前为止还没有包含apache poi。不幸的是,没有关于poi-ooxml-schemas-4.0.0.jar公开的文档。因此,我们需要下载源代码并自行完成org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableFormula

以下示例使用ooxml-schemas为我工作。如果在编译或运行时遇到问题,原因可能是在编译时和/或运行时,类路径中有javadoc apache poi 4.0.0的多个不同版本。 Do not mix different apache poi versions。另外,正如已经说过的那样,我的代码需要the full jar of all of the schemas ooxml-schemas-1.4.jar

apache poi