尝试打开Excel工作簿时,尝试/ Catch不会激活

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试打开Excel工作簿时,尝试/ Catch不会激活相关的知识,希望对你有一定的参考价值。

使用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");
}
 }

您可以根据需要修改Solution类部件。

以上是关于尝试打开Excel工作簿时,尝试/ Catch不会激活的主要内容,如果未能解决你的问题,请参考以下文章

在 Excel 2007 中打开工作簿时编译错误

打开 openpyxl 保存的工作簿时 Excel 有不可读的内容

VBA 一些概念与细节

保存工作簿时发送电子邮件

当其他Excel实例具有焦点时,无法获取活动工作表或选定范围

首次运行时Excel VBA授权失败,第二次运行正常运行