当前位置: 首页 > 知识库问答 >
问题:

Excel工作表POI工作簿已包含工作表

翟宾实
2023-03-14

我得到了这个错误:

工作簿已包含此名称的工作表

private void cleanDataSheets(XSSFWorkbook workbookTemplate) {
    int numberOfQueries = extraction.getQueries().size();
    // DATA[maxIndex][minIndex] --> ex : DATA00, DATA01, ..., DATA10
    int maxIndex = 0;
    int minIndex = 0;
    String sheetName = DATA_SHEET_NAME + maxIndex + minIndex;

    while (maxIndex < numberOfQueries) {
        Sheet sheet = workbookTemplate.getSheet(sheetName);

        if (sheet == null) {
            maxIndex++;
            minIndex = 0;

        } else {
            workbookTemplate.removeSheetAt(workbookTemplate.getSheetIndex(sheet));

            if (minIndex == 0) {
                if (workbookTemplate.getSheetIndex(sheetName) == -1) {
                    workbookTemplate.createSheet(sheetName);
                }

            }
            minIndex++;
        }
    }
}

if(workbookTemplate.getSheetIndex(sheetName)==-1)应该检查工作簿是否已经包含此名称的工作表,但它不工作。我仍然有错误。

谢谢你的帮助!

共有1个答案

应涵容
2023-03-14

您是否尝试过将String SheetName=...循环中移动?

按照您的操作方式,它总是尝试在每个循环中删除并重新创建相同的sheetName

private void cleanDataSheets(XSSFWorkbook workbookTemplate) {
    int numberOfQueries = extraction.getQueries().size();
    // DATA[maxIndex][minIndex] --> ex : DATA00, DATA01, ..., DATA10
    int maxIndex = 0;
    int minIndex = 0;


    while (maxIndex < numberOfQueries) {
        String sheetName = DATA_SHEET_NAME + maxIndex + minIndex;
        Sheet sheet = workbookTemplate.getSheet(sheetName);

        if (sheet == null) {
            maxIndex++;
            minIndex = 0;

        } else {
            workbookTemplate.removeSheetAt(workbookTemplate.getSheetIndex(sheet));

            if (minIndex == 0) {
                if (workbookTemplate.getSheetIndex(sheetName)== -1){
                    workbookTemplate.createSheet(sheetName);
                }

            }
            minIndex++;
        }
    }
}

 类似资料:
  • 所以在问这个之前,我搜索并发现了一些与我在这里想要做的相似的事情。 基本上我有工作簿AlphaMaster。这个工作簿是一个模板,我想用它来创建每周的新工作簿。 在本工作簿中,有名为“周一至周六”的工作表,以及带有相应日期的周一、周二等其他工作表。 我创建了一个在打开工作簿时加载的表单。我想要的是当我单击表单运行时,它将: > 将代码保存模板作为新工作簿运行 根据userform1的输入重命名工作

  • 我正试图在一个excel文件中复制多个文件。该excel文件中的每张工作表将包含一个文件的内容。我需要复制大约6个文件。因此生成的文件应该包含6张。但当我运行代码时,仅为单个文件生成1个工作表。我试着调试它,但无法找出原因。 这是我的密码。

  • 我使用这段代码将工作簿中的每一张工作表复制到一个新的工作簿中,它工作得很好,但它颠倒了工作表的顺序,是否有任何办法阻止它这样做? 我正在复制所有的工作表,这样我就可以将它保存为不同的文件扩展名,这是我发现唯一有效的方法。

  • 我是一个真正的新手程序员,试图用Apache Poi为一个朋友制作一个编辑电子表格的小java程序。目前,我使用以下代码浏览excel文件: 问题是我不知道 excel 文件将具有的确切工作表数。我试过了: 但它不起作用,所以我想知道是否有任何方法可以浏览工作簿的所有工作表。

  • 所以我有 1500 个 Excel 工作簿,每个工作簿都有 10 张结构完全相同的工作表。我尝试将多个Excel工作簿合并到一个文件中,并使用以下代码成功: 谢谢,努尔贝克

  • ...需要很长时间(~30秒),并且该文件只有72行10列(365KB)。 这不是问题,只是看起来有点过分。我在想我是做错了什么,还是没有做我应该做的事情。实例化具有相同数据(但只有25KB)的xls文件只需1或2秒。如果这是正常的,那么有人可以告诉我。 编辑: 因此,我不知道这是App Engine的问题,还是POI不喜欢返回的InputStream的味道。顺便说一句,我不能用而不是尝试初始化,