使用 Apache POI 向 XSLX 文件中的现有 table 添加一列

Adding a column to an existing table in an XSLX file using Apache POI

我正在尝试使用 Apache POI(版本 3.15-beta2,但我也尝试过 3.14)向 XLSX 电子表格中的现有 table 添加列。使用下面的代码,我设法添加了一列,但它并没有完全起作用。

Excel 2013 尝试打开文件时出错(我们发现“....xlsx”中的某些内容有问题。您是否希望我们尝试恢复尽我们所能?如果您信任此工作簿的来源,请单击“是”。)。如果我单击 "yes",文件将打开并且 table 已成功调整大小并添加新内容,但该列没有我为其设置的名称(它设置为 "Columna1") 并且它有一个我不想要的过滤器,另外我当然想在打开文件时摆脱警告。

有谁知道问题出在哪里?提前致谢!

这是(编辑过的)代码。我原来的table已经有三列了(第一列是header列),它的数据在A18:C24)。

XSSFTable selectedTable = findMyTable();

CTTable ctTable = selectedTable.getCTTable();

CTTableColumns tableColumns = ctTable.getTableColumns();
tableColumns.setCount(4);

CTTableColumn newCol = tableColumns.addNewTableColumn();

newCol.setId(4);
newCol.setName("NEWCOLUMN");

ctTable.setRef("A18:D24");
CTAutoFilter autoFilter = ctTable.getAutoFilter();
autoFilter.setRef("A18:D24");

作为参考,这是我得到的:

好的,问题显然是您必须手动将列 header 的单元格值设置为您为 CTTableColumn object.

设置的名称

所以,添加

sheet.getRow(17).createCell(3);
sheet.getRow(17).getCell(3).setCellValue("NEWCOLUMN");

成功了。

要在所有列中禁用过滤,只需添加

ctTable.unsetAutoFilter();