Apache POI有效删除多个列

时间:2017-07-10 11:20:24

标签: java excel apache-poi

我有一个程序可以更改给定目录中的多个excel文件。 我需要从excel文件中删除多个列。例如,我想在第5个之后删除所有列。

private void deleteColumns(Sheet sheet, int columnIndex) {
    for (Row row : sheet) {
        int j = 0;

        for (Cell cell : row) {
            if (j >= columnIndex) {
                row.removeCell(cell);
            }
            j++;
        }
    }
}

我得到 ConcurrentModificationException

我看到了一篇关于如何删除单元格的帖子。 Apache POI xls column Remove

这个想法对我来说很清楚。我需要创建一行,在那里克隆必要的单元格,然后删除该行。

还有什么其他解决方案?

我还尝试创建一个替换行,克隆我需要的单元格,然后删除原始行。我从这里接受了这个想法。

Apache POI xls column Remove

我希望看到一些更好的解决方案,使用更少的代码或更有效,然后逐个删除单元格。

1 个答案:

答案 0 :(得分:3)

不是直接更新Row,而是使用Iterator,如下所示

Sheet sheet = wb.getSheetAt(0);
Iterator<Row> rowIte =  sheet.iterator();
while(rowIte.hasNext()){
  rowIte.next();              
  rowIte.remove();
 }