使用Apache POI将列添加到XSLX文件中的现有表

时间:2016-08-01 19:20:10

标签: java excel apache-poi xlsx

我正在尝试使用Apache POI(版本3.15-beta2,但我也尝试过3.14)将列添加到XLSX电子表格中的现有表中。使用下面的代码,我设法添加一个列,但它不能完全发挥作用。

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

有谁知道问题可能在哪里?提前谢谢!

这是(编辑过的)代码。我的原始表已经有三列(第一列是标题列),其数据在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");

供参考,这是我得到的: Excel table with new column

1 个答案:

答案 0 :(得分:0)

好的,问题显然是您必须手动将列标题的单元格值设置为您为CTTableColumn对象设置的名称。

所以,添加

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

做了这个伎俩。

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

即可
ctTable.unsetAutoFilter();