簡體   English   中英

從 POI 中的工作簿中刪除工作表

[英]Delete sheet from WorkBook in POI

我有一個工作簿,我正在嘗試刪除名稱與特定字符串不匹配的工作表。

這是我的代碼

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

您應該以相反的順序刪除,而不是向前的順序。 否則,您從列表中刪除工作表並更改其狀態以供將來循環使用。

關於工作表 A、B、C 和 D 的情況。您迭代到 i=1,然后得到 B。您刪除 B。如果您不重新獲取 1 處的行,然后繼續到 i=2,你會在 D 上並且會跳過 C。反向迭代可以避免這個問題。

使用 Apache POI 刪除工作表

//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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM