如何删除Java中的Excel工作表的内容?
如何使用Java SE和Apache POI删除Excel工作簿中Excel工作表的内容?
正如前面的评论所述
Sheet sheet = wb.getSheetAt(0); for (Row row : sheet) { sheet.removeRow(row); }
这个代码抛出ConcurrentModificationException给我。 所以,我修改了代码,它工作正常。 这里是代码:
Sheet sheet = wb.getSheetAt(0); Iterator<Row> rowIte = sheet.iterator(); while(rowIte.hasNext()){ rowIte.next(); rowIte.remove(); }
我发现removeSheetAt / createSheet不是一个真正可以接受的答案,因为不能将新工作表放入工作簿中的正确位置,而不会遇到WorkSheet.setSheetOrder中的错误
这个代码片段
Sheet sheet = wb.getSheetAt(0); for (Row row : sheet) { sheet.removeRow(row); }
在我的世界抛出一个ConcurrentModificationException
我不得不求助于
for (int index = crnt.getLastRowNum(); index >= crnt.getFirstRowNum(); index--) { crnt.removeRow( crnt.getRow(index)); }
根据您要删除的内容,您可以删除单个单元格或行。
太删除整个工作表迭代所有行并将其删除。
Sheet sheet = wb.getSheetAt(0); for (Row row : sheet) { sheet.removeRow(row); }
我知道这是一个古老的线程,但我认为我find了最好的解决scheme
我所做的只是创build一个相同types的新工作簿,并将其保存在我想要删除的文件上。
这里是代码
private void clearOldFile(){ FileOutputStream out = null; try{ oldFile = new XSSFWorkbook(); Sheet sheet = oldFile.createSheet("temp data"); out = new FileOutputStream(AbsolutePathForTempExcelFile); oldFile.write(out); out.close(); } catch(Exception e){ e.printStackTrace(); } }
您可能要使用HSSFWorkbook.removeSheetAt(index)
。
我也得到了并发修改exception,也使用了更“现代”的方式:
sheet.forEach(r->sheet.remove(r));
来自@Thirupathi S的基于迭代器的解决scheme显然工作,但由于原因,我不完全知道它是创buildxslx文件,这是苹果的数字和OSX预览(也可能是其他软件)无法读取。
我怀疑这与迭代器没有删除某些东西有关:removeRow方法的代码比简单的迭代器删除操作更复杂。
使用反向索引的旧平原循环就像一个魅力:
for (int i = sheet.getLastRowNum(); i >= 0; i--) { sheet.removeRow(sheet.getRow(i)); }
我想这是一个古老的线程,但我也得到ConcurrentModificationException。 基于VoiceOfUnreason,我发现这个工作:
while (xlsSheet.getPhysicalNumberOfRows() > 0) { xlsSheet.removeRow(xlsSheet.getRow(xlsSheet.getLastRowNum())); } if (xlsSheet.getDrawingPatriarch() != null) { xlsSheet.getDrawingPatriarch().clear(); }
其他迭代器方法似乎工作,但Excel然后拒绝打开文件。 这个为我工作:
int rownum; while ((rownum=sheet.getLastRowNum()) > 0) sheet.removeRow(sheet.getRow(rownum));
这个解决scheme适用于我。 还要考虑特殊情况,例如表单为空白,或firstRow和lastRow之间存在空格。
public void cleanSheet(Sheet sheet) { int numberOfRows = sheet.getPhysicalNumberOfRows(); if(numberOfRows > 0) { for (int i = sheet.getFirstRowNum(); i <= sheet.getLastRowNum(); i++) { if(sheet.getRow(i) != null) { sheet.removeRow( sheet.getRow(i)); } else { System.out.println("Info: clean sheet='" + sheet.getSheetName() + "' ... skip line: " + i); } } } else { System.out.println("Info: clean sheet='" + sheet.getSheetName() + "' ... is empty"); } }