我有一个工作簿,我正在尝试删除名称与特定字符串不匹配的工作表.
这是我的代码
XSSFWorkbook book = new XSSFWorkbook(new FileInputStream(excelName));
for(int i=0;i<book.getNumberOfSheets();i++){
System.out.println(book.getSheetAt(i).getSheetName());
if(!book.getSheetAt(i).getSheetName().equals(sheetName)){
book.removeSheetAt(i);
}
}
Run Code Online (Sandbox Code Playgroud)
代码运行良好,但它不执行所需的任务
所述解决方案是颠倒循环次序.这是一个更干净的代码
private void removeOtherSheets(String sheetName, XSSFWorkbook book) {
for(int i=book.getNumberOfSheets()-1;i>=0;i--){
XSSFSheet tmpSheet =book.getSheetAt(i);
if(!tmpSheet.getSheetName().equals(sheetName)){
book.removeSheetAt(i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
您应该以相反的顺序删除,而不是转发顺序.否则,从列表中删除工作表并更改其状态以供将来循环使用.
关于工作表A,B,C和D的情况.你迭代到i = 1,得到B.你删除B.如果你没有在1处重新获取行,并继续i = 2,你会在D上,并且会跳过C!反向迭代避免了这个问题.
| 归档时间: |
|
| 查看次数: |
9304 次 |
| 最近记录: |