+-
Apache POI XSSFWorkbook向文件抛出NullPointerException

现在任何帮助都值得赞赏-我的机智已尽。我在这里检查了所有可能的问题,都遇到了类似的问题,但没有一个解决方案起作用。我觉得我确实缺少一些明显的东西,但是我看不到。

我在Windows 10上,使用Eclipse 2019,以及xmlbeans版本3.1.0的最新Apache POI jar文件(不是maven)。我想读取一个xlsx文件,但是每次运行代码时(这是我看到的一个基本示例,并已在多个网站和视频上成功运行),在创建工作簿的那一行会收到“ NullPointerException” :

import java.io.File;
//import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
//import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class excelImportTest {


    public static void main (String args[]) throws IOException, InvalidFormatException {

      // Linking file to Workbook
      // ****Where exception is called every time****
      XSSFWorkbook wb = new XSSFWorkbook(new File("C:\\Users\\Owner\\Downloads\\TestData.xlsx"));

      // Pulling sheet from Workbook
      XSSFSheet sheet = wb.getSheetAt(0);

      // Get iterator to all the rows in current sheet
      Iterator<Row> rowIterator = sheet.iterator();

      // Traversing over each row of XLSX file
      while (rowIterator.hasNext()) {
          Row row = rowIterator.next();

          // For each row, iterate through each columns
          Iterator<Cell> cellIterator = row.cellIterator();

          while (cellIterator.hasNext()) {
              Cell cell = cellIterator.next();
              switch(cell.getCellType()) {
              case STRING:
                  System.out.print(cell.getStringCellValue() + "\t");
                  break;
              case NUMERIC:
                  System.out.print(cell.getNumericCellValue() + "\t");
                  break;
              case BOOLEAN:
                  System.out.print(cell.getBooleanCellValue() + "\t");
                  break;
              default :
              }
          }
      }
      wb.close();

这里是我收到的例外:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at sun.misc.Unsafe.ensureClassInitialized(Native Method)
    at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(Unknown Source)
    at sun.reflect.ReflectionFactory.newFieldAccessor(Unknown Source)
    at java.lang.reflect.Field.acquireFieldAccessor(Unknown Source)
    at java.lang.reflect.Field.getFieldAccessor(Unknown Source)
    at java.lang.reflect.Field.get(Unknown Source)
    at org.apache.xmlbeans.XmlBeans.typeSystemForClassLoader(XmlBeans.java:775)
    at org.openxmlformats.schemas.drawingml.x2006.main.ThemeDocument.<clinit>(Unknown Source)
    at org.openxmlformats.schemas.drawingml.x2006.main.ThemeDocument$Factory.parse(Unknown Source)
    at org.apache.poi.xssf.model.ThemesTable.<init>(ThemesTable.java:86)
    at org.apache.poi.ooxml.POIXMLFactory.createDocumentPart(POIXMLFactory.java:61)
    at org.apache.poi.ooxml.POIXMLDocumentPart.read(POIXMLDocumentPart.java:684)
    at org.apache.poi.ooxml.POIXMLDocument.load(POIXMLDocument.java:180)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:288)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:325)
    at excelImportTest.main(excelImportTest.java:62)
Caused by: java.lang.RuntimeException: Could not instantiate SchemaTypeSystemImpl (java.lang.reflect.InvocationTargetException): is the version of xbean.jar correct?
    at schemaorg_apache_xmlbeans.system.sD023D6490046BA0250A839A9AD24C443.TypeSystemHolder.loadTypeSystem(Unknown Source)
    at schemaorg_apache_xmlbeans.system.sD023D6490046BA0250A839A9AD24C443.TypeSystemHolder.<clinit>(Unknown Source)
    ... 16 more
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    ... 18 more
Caused by: java.lang.NullPointerException
    at org.apache.xmlbeans.impl.schema.ClassLoaderResourceLoader.getResourceAsStream(ClassLoaderResourceLoader.java:33)
    at org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl$XsbReader.getLoaderStream(SchemaTypeSystemImpl.java:2249)
    at org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl$XsbReader.<init>(SchemaTypeSystemImpl.java:1522)
    at org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl.initFromHeader(SchemaTypeSystemImpl.java:273)
    at org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl.<init>(SchemaTypeSystemImpl.java:185)
    ... 22 more

我已经尝试过可以想到的所有选项和在网上找到的建议的所有组合:

我创建了一个单独的FileInputStream(new File(...)),并运行了一个if语句来查看它是否为null。这返回“ not null”,但到达上一行时仍然出现异常 我尝试使用嵌套的新FileInputStream(new File(...))格式运行该行,并收到相同的错误 我一直在使用try-catch块作为异常,但是在中止程序之前它似乎没有标记异常 我尝试使用包含Apache-POI的OCPPackage.open(new File(...))方法,并得到相同的错误

我是否缺少任何明显的方法,或者这是否源于我的设置中的其他问题?如果您还有其他信息,也请告诉我。

0
投票

我认为您没有正确添加罐子。

首先转到此URL,然后从此处下载poi-bin-4.1.2-20200217.zip。

现在解压缩zip并将其添加到您的项目中。

enter image description here

enter image description here