Java Check 工作簿包含特定电子表格或不使用 Apache POI

标签 java excel apache-poi

我正在使用 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);   

我遇到了两个问题。

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

例如

  if ((workbook.getNumberOfSheets() == 0) && !workbook.getSheet("sheet1").exists()) {
    workbook.createSheet("sheet1");
  } else workbook.getSheet("sheet1")
  1. 我一直收到电子表格未初始化的错误,但如果我删除 for 循环,错误就会消失。

最佳答案

我用下面的代码想出了我的问题:

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

关于Java Check 工作簿包含特定电子表格或不使用 Apache POI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43645607/

相关文章:

java - 如何用 Java 编写系统首选项?我可以调用 UAC 吗?

java - 针对不同版本的 Java 代码或预处理进行细微更改?

java - Spring MVC - DispatcherServlet 通过注释

excel - 以 "=xxx+xxx..."的形式生成总和

java - 使用 java apache POI 写入 Excelsheet 时出现问题

java - 如何使用 sbt 的 GenJavaDoc 插件?

java - 在 Maven 项目中使用 Apache POI 运行 .jar 文件

excel - 我可以在 Excel DNA 项目中使用 Microsoft.Office.Tools.Excel,还是有其他方法来完成表的数据绑定(bind)?

java - 在 Spring 中使用 JPA 规范获取要执行的查询

java - 从 RTF 文件中读取文本