使用 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();
我正在尝试使用 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();