4

WorkBookを持っていて、名前が特定の文字列と一致しないシートを削除しようとしています。

これが私のコードです

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);
                }
            }   

コードは正常に実行されますが、目的のタスクを実行しません

編集

上記の解決策は、ループの順序を逆にすることです。これがよりクリーンなコードです

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);
                }
            }       
    }
4

2 に答える 2

8

順方向ではなく、逆方向に削除する必要があります。それ以外の場合は、リストからシートを削除し、将来のループのためにシートの状態を変更します。

シートA、B、C、およびDの場合について説明します。i= 1まで繰り返し、Bを取得します。Bを削除します。1で行を再フェッチしない場合は、i=2に進みます。あなたはDになり、Cをスキップします!逆に繰り返すことで、この問題を回避できます。

于 2012-12-14T04:47:26.373 に答える
-1

ApachePOIを使用してシートを削除する

//Open file
  String filePath = "C:\\filePath\\excelFileName.xlsx";
  String sheetName = "NameOfSheetToBeDeleted";
  FileInputStream inputStream = new FileInputStream(new File(filePath));
  XSSFWorkbook workBook = new XSSFWorkbook(inputStream);

//DELETE SHEET
  workBook.removeSheetAt(resultWorkbook.getSheetIndex(sheetName));

//Save the file
  FileOutputStream outFile =new FileOutputStream(new File(filePath));
  workBook.write(filePath);
  outFile.close();
于 2020-04-25T08:31:34.420 に答える