java - 当尝试打开 Excel 工作簿时发生错误时,Try/Catch 不会激活

标签 java excel error-handling apache-poi

使用 apache-POI 打开 Excel 工作簿,如果不存在则创建一个。 由于某种原因,正在打开的工作簿已损坏,导致带有错误注释的行发生错误。

不知何故,这部分代码的 try/catch 似乎没有激活。任何想法为什么,以及我如何正确处理这些类型的错误? 此外,有什么方法可以在我的 if(file.exists() && file.length() != 0) { 条件期间检查文件的完整性?

public XSSFWorkbook OpenWB(String directory, String name) {
      File file = new File(directory + "\\" + name + ".xlsx");
      FileInputStream fIP;

      if(file.exists() && file.length() != 0) {
        try {
            fIP = new FileInputStream(file);
            //Get the workbook instance for XLSX file 
             workbook = new XSSFWorkbook(fIP); //*********error occurs here**********
             fIP.close();
             System.out.println(name + ".xlsx file open successfully.");
             return workbook;
        } catch (IOException e) {
            e.printStackTrace();
             System.out.println("Error to open " + name + ".xlsx file, creating blank");
              //Create Blank workbook
              workbook = new XSSFWorkbook(); 
              Integer i = 0;
              while (file.isFile() && file.exists()) {
                  name = name.concat(i.toString());
                  file = new File(directory + "\\" + name + ".xlsx");
                  i++;
              }
              return workbook;
        }
      } else {
         System.out.println("Error to open " + name + ".xlsx file, creating blank");
          //Create Blank workbook
          workbook = new XSSFWorkbook(); 
          return workbook;
      }
}   

最佳答案

尝试这段代码,它会给你一个错误 “打开 random.xlx 文件时出错,创建空白” 这意味着您的 try catch 正在运行。您似乎忘记初始化变量“工作簿”。

      package stackoverflow;
      import java.io.File;
      import java.io.FileInputStream;
      import java.io.IOException;

      import org.apache.poi.xssf.usermodel.XSSFWorkbook;

      public class Solution {
      public XSSFWorkbook OpenWB(String directory, String name) {
      File file = new File(directory + "\\" + name + ".xlsx");
      FileInputStream fIP;

      XSSFWorkbook workbook;
     if(file.exists() && file.length() != 0) {
        try {
            fIP = new FileInputStream(file);
            //Get the workbook instance for XLSX file 
             workbook = new XSSFWorkbook(fIP); //*********error occurs here**********
             fIP.close();
             System.out.println(name + ".xlsx file open successfully.");
             return workbook;
        } catch (IOException e) {
            e.printStackTrace();
             System.out.println("Error to open " + name + ".xlsx file, creating blank");
              //Create Blank workbook
              workbook = new XSSFWorkbook(); 
              Integer i = 0;
              while (file.isFile() && file.exists()) {
                  name = name.concat(i.toString());
                  file = new File(directory + "\\" + name + ".xlsx");
                  i++;
              }
              return workbook;
        }
      } else {
         System.out.println("Error to open " + name + ".xlsx file, creating blank");
          //Create Blank workbook
          workbook = new XSSFWorkbook(); 
          return workbook;
      }
}  
public static void main(String args[]) {
    Solution s = new Solution();
    s.OpenWB("D://", "random.xlx");
}
 }

您可以根据需要修改解决方案类部分。

关于java - 当尝试打开 Excel 工作簿时发生错误时,Try/Catch 不会激活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52209409/

相关文章:

java - 命名 CDI bean 的默认范围是什么?

sql-server - 从 Sharepoint 到 SQL Server 的 SSIS Excel/CSV

excel - 在 excel 中选择范围并使其成为表格以供进一步引用

windows - 奇怪的 Qt SSL 问题——出现错误 "No Error",没有别的,如果我忽略它,一切正常

c - C 中的错误处理 : unable to malloc in nested function

java - Apache poi xlsx 的生成速度因图像较多而变慢

java - log4j2 java.lang.NoClassDefFoundError : org/apache/logging/log4j/LogManager 错误

Python-Pygame 不工作

java - 有时连接 MySQL 时出现问题

excel - 使用 VBA 从列表中重命名多个工作表