【问题标题】:Delete multiple sheets from workbook从工作簿中删除多张工作表
【发布时间】:2020-07-20 20:52:11
【问题描述】:

我有一个工作簿,其中包含多张工作表。我需要的是只处理第一张纸,不需要那些剩余的纸。可以使用,删除特定索引处的工作表,

workbook.removeSheetAt(sheetIndex);

有没有更简单的方法来删除除一张纸之外的所有纸。还是我每次都必须循环通过上述方法来删除工作表。

【问题讨论】:

    标签: java spring-boot apache-poi hssfworkbook


    【解决方案1】:

    我只会移动一张工作表以保留到新工作簿,然后关闭而不保存旧工作簿,然后使用原始名称保存新工作簿以覆盖旧工作簿。

    无需知道存在多少张或其他多少。

    您可能会在这个宏中找到一些有用的东西: https://stackoverflow.com/a/30605765/4961700

    几年前,我们有一个删除宏,可以从文件系统目录结构中删除成百上千个文件,为每月更新做好准备。然后我们意识到,在上层删除文件系统并重新创建目录结构要快得多,节省的时间...

    【讨论】:

    • 如何将现有工作表添加到工作簿?
    • @pirho 当您打开一个新文件时,它已经有 1 个或多个工作表。 `看看我在答案中添加了什么。
    • 但是使用 Apache POI 和 Java?
    • 我不理解评论混乱。创建一个新的工作簿可以在 poi 中完成,所以建议的工作流程是完全可行的。
    • ... 实际上,这与将工作表从一个工作簿复制到另一个工作簿相同(显然,您只需要创建第二个工作簿。)stackoverflow.com/questions/848212/…
    【解决方案2】:

    您必须遍历所有要删除的工作表。也就是说,代码并不多:

    File f = new File("path-to-your-workbook");
            
    try (FileInputStream file = new FileInputStream(f)) {
    
        XSSFWorkbook workbook = new XSSFWorkbook(file);
                
        int totalSheets = workbook.getNumberOfSheets();
                
        for (int i = 1; i < totalSheets; i++ ) {
            workbook.removeSheetAt(1);
        }
                
        try (FileOutputStream output = new FileOutputStream(f)) {
            workbook.write(output);
        }
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      • 2021-11-18
      相关资源
      最近更新 更多