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

Java检查工作簿包含特定的电子表格或未使用Apache POI

吉泰宁
2023-03-14

我正在使用apache POI创建一个包含多个电子表格的Excel文件。首先,此方法应在检查工作簿是否存在后检查工作簿是否为空。如果为空,请创建新的工作表名称“sheet1”;如果不是,请检查此工作簿中任何名为“sheet1”的工作表。如果是,则向工作表添加新行;如果不是,请创建一个工作表名称“sheet1”。以下是我当前的代码,我认为这不是实现我目标的正确方法:

    File file = new File("Main Data.xlsx");
    // Retrieve the workbook for the main report
    XSSFWorkbook workbook;
    // Check file existence 
    if (file.exists() == false) {
        // Create new file if it does not exist
        workbook = new XSSFWorkbook();
    } else {
        try ( 
            // Make current input to exist file
            InputStream is = new FileInputStream(file)) {
                workbook = new XSSFWorkbook(is);
            }
    }
    XSSFSheet spreadsheet;
    // Check if the workbook is empty or not
    if (workbook.getNumberOfSheets() != 0) {
        for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
           if (workbook.getSheetName(i).equals(" Enc " + deviceLabel.getText() + " Info. ")) {
                spreadsheet = workbook.getSheet(" Enc " + deviceLabel.getText() + " Info. ");
            } else spreadsheet = workbook.createSheet(" Enc " + deviceLabel.getText() + " Info. ");
        }
    }
    else {
        // Create new sheet to the workbook if empty
        spreadsheet = workbook.createSheet(" Enc " + deviceLabel.getText() + " Info. ");
    }

    // Error here (variable spreadsheet may not have been initialized
    spreadsheet.shiftRows(0, spreadsheet.getLastRowNum(), 23);   

我遇到的拖曳问题。

    < Li > for循环显然是错误的,无法实现我的目标。有什么方法可以让我在一个if语句中同时检查空电子表格或已命名电子表格是否存在?

例如

  if ((workbook.getNumberOfSheets() == 0) && !workbook.getSheet("sheet1").exists()) {
    workbook.createSheet("sheet1");
  } else workbook.getSheet("sheet1")

共有3个答案

鲜于海
2023-03-14

您已将工作簿声明为最终版本,它不能是工作的初始版本!

慕嘉茂
2023-03-14

您可以简单地检查是否创建了工作表

workbook.getSheetIndex(sheetName)

如果工作表不在工作簿中,则返回-1;如果工作簿中存在,则返回索引。

管杜吟
2023-03-14

我发现了以下代码的问题:

    File file = new File("Main Data.xlsx");
    // Retrieve the workbook for the main report
    XSSFWorkbook workbook;
    // Check file existence 
    if (file.exists() == false) {
        // Create new file if it does not exist
        workbook = new XSSFWorkbook();
    } else {
        try ( 
            // Make current input to exist file
            InputStream is = new FileInputStream(file)) {
                workbook = new XSSFWorkbook(is);
            }
    }
    XSSFSheet spreadsheet = workbook.getSheet("sheet1");
    // Check if the workbook is empty or not
    if (workbook.getNumberOfSheets() != 0) {
        for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
           if (workbook.getSheetName(i).equals("sheet1")) {
                spreadsheet = workbook.getSheet("sheet1");
            } else spreadsheet = workbook.createSheet("sheet1");
        }
    }
    else {
        // Create new sheet to the workbook if empty
        spreadsheet = workbook.createSheet("sheet1");
    }

    // Shift rows down if exist
    spreadsheet.shiftRows(0, spreadsheet.getLastRowNum(), 23);   
 类似资料:
  • 我得到了这个错误: 工作簿已包含此名称的工作表 行应该检查工作簿是否已经包含此名称的工作表,但它不工作。我仍然有错误。 谢谢你的帮助!

  • 我试图通过电子表格发送电子邮件。脚本从电子表格中的工作表中获取电子邮件和电子邮件正文。当此工作表是第一个工作表时,脚本工作正常。然而,出于我不想深入讨论的原因,我需要另一张表格作为第一张。我试过使用: var ss=电子表格应用程序。活跃起来。表(); var表=ss.getSheetByName('电子邮件'); 然而,当我这样做时,我得到了信息 TypeError:在对象工作表中找不到函数ge

  • 我很难找到关于如何设置onEdit触发器的好资源。我有一个只想在编辑特定工作表时运行的函数。例如,假设我有表1、表2、表3、表4、表5。我的脚本从工作表2、3、4中提取数据并填充工作表1。我只希望在有人编辑工作表2、3或4时运行脚本。如何设置此触发器?

  • 我不熟悉谷歌电子表格功能,并尝试以以下方式应用公式: 我有一张床单 我想链接工作表2中的范围数据 现在需要考虑的是,它只显示了一个项目(最后一个),而这个范围本来应该显示十个项目(a1:a10) 有关更正上述公式的详细信息和帮助,请查看以下链接: https://docs.google.com/spreadsheets/d/1HX1eatP57A5k9Xku7awIVnBPQ2A4ICVrYXTs

  • 我在为一些不寻常的事情挣扎。。。 我正在做一个谷歌电子表格,有很多表格,它们的名字是MM/YYYY,我需要获取A1:B100范围内的所有数据,然后用这些数据在主数据表上进行查询,问题是,我用javascript做了一个函数来获取这些表格的范围,但我不能在=QUERY()上使用它们功能,尝试了很多,用不同的方法从互联网上,但没有成功。。 我的电子表格示例: https://docs.google.c