【问题标题】:How to Solve Apache POI "workbook" might not have been initialized如何解决 Apache POI“工作簿”可能尚未初始化
【发布时间】:2020-07-03 12:31:15
【问题描述】:

我需要读取文件 excel,我正在使用 java spring boot,Apache poi。 他们告诉我们

使用较新的 .xlsx 文件格式时,您将使用 XSSFWorkbook、XSSFSheet、XSSFRow 和 XSSFCell 类。要使用旧的 .xls 格式,请使用 HSSFWorkbook、HSSFSheet、HSSFRow 和 HSSFCell 类。

这是我的代码:


    Workbook workbook;
            if (FileExtension == "xlsx"){
                workbook = new XSSFWorkbook(excelFile);
            }
            else if (FileExtension == "xls"){
                workbook = new HSSFWorkbook(excelFile);
            }
Sheet datatypeSheet = workbook.getSheetAt(0);

现在我得到的“工作簿”可能尚未初始化。 如何解决?

【问题讨论】:

    标签: java spring-boot apache-poi


    【解决方案1】:

    您需要使用 xmlbeans3.1 而不是 xmlbeans4.0。

    【讨论】:

      【解决方案2】:

      当前apache poi版本提供WorkbookFactory。使用该类的create 方法,无需通过文件扩展名确定文件格式(XSSFHSSF)。 WorkbookFactory.create 方法根据找到的文件内容创建 XSSFWorkbookHSSFWorkbook

      使用也是如此:

      ...
      Workbook workbook = WorkbookFactory.create(excelFile);
      Sheet datatypeSheet = workbook.getSheetAt(0);
      ...
      

      【讨论】:

        【解决方案3】:

        我相信这是 JVM 问题的一部分,但有时初始化和声明有时是唯一的方法。 试试这个:

                if (FileExtension == "xlsx"){
                       Workbook workbook = new XSSFWorkbook(excelFile);
                }
                else if (FileExtension == "xls"){
                      Workbook workbook = new HSSFWorkbook(excelFile);
                }
        

        Sheet datatypeSheet = workbook.getSheetA

        【讨论】:

          【解决方案4】:

          未初始化..你应该这样做

          Workbook wb;
          
          wb = Workbook.getWorkbook(new File("d:\\test\\book1.xls"));
          

          【讨论】:

          • 错误:(25, 33) java: org.apache.poi.ss.usermodel.Workbook 是抽象的;无法实例化
          • 你能在你的逻辑中试试这个吗??我刚刚编辑了我的答案
          • 不幸的是,正如我之前提到的,我使用的是 POI apache,而不是 JExcel
          【解决方案5】:

          我想你想表达的是这个……

          Workbook workbook;
          if (FileExtension == "xlsx"){
              workbook = new XSSFWorkbook(excelFile);
          }
          // for other case
          else{
              workbook = new HSSFWorkbook(excelFile);
          }
          Sheet datatypeSheet = workbook.getSheetAt(0);
          

          注意代码中的注释,我相信可以自己研究差异,这很有帮助。

          【讨论】:

            【解决方案6】:

            试试这个...

            Workbook workbook = null;
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-03-25
              • 2015-07-04
              • 1970-01-01
              相关资源
              最近更新 更多