【问题标题】:Exception in thread "main" org.apache.poi.POIXMLException exception appearing while reading data from xlsx file using apache POI使用 apache POI 从 xlsx 文件读取数据时出现线程“主”org.apache.poi.POIXMLException 异常
【发布时间】:2016-03-18 15:18:42
【问题描述】:

请在下面找到代码.....

package sanityTests;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;

public class ApachePOI {

    public static void main(String[] args) throws Exception {

        File src = new File("C:/Users/Ishan/Desktop/TestData.xlsx");
        FileInputStream fis = new FileInputStream(src);
        XSSFWorkbook wb = new XSSFWorkbook(fis);   // To deal with XLSX workbook 
        //HSSFWorkbook wb1 = new HSSFWorkbook(fis1);   // To deal with XLS workbook

        XSSFSheet sheet1 =wb.getSheetAt(0);
        String data0 = sheet1.getRow(0).getCell(0).getStringCellValue();
        System.out.println(data0);
        wb.close();
    }
}

运行程序时出现以下问题:-

Exception in thread "main" org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
    at org.apache.poi.POIXMLFactory.createDocumentPart(POIXMLFactory.java:65)
    at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:601)
    at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:174)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:279)
    at sanityTests.ApachePOI.main(ApachePOI.java:20)
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)
    at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:56)
    at org.apache.poi.POIXMLFactory.createDocumentPart(POIXMLFactory.java:62)
    ... 4 more
Caused by: java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.setLoadEntityBytesLimit(I)Lorg/apache/xmlbeans/XmlOptions;
    at org.apache.poi.POIXMLTypeLoader.<clinit>(POIXMLTypeLoader.java:50)
    at org.apache.poi.xssf.model.ThemesTable.<init>(ThemesTable.java:85)
    ... 10 more

如果我将文件格式从 xlsx 更改为 xls,它可以正常工作。不确定如何解决该错误。我已经包括了所有的罐子,比如 xml-beans 和 poi 罐子。仍然收到错误。请帮忙

【问题讨论】:

    标签: java excel selenium-webdriver apache-poi xmlbeans


    【解决方案1】:

    您没有为任何组件提供任何版本号。但是,XmlOptions.setLoadEntityBytesLimit(int) 仅添加到 XMLBeans version 2.6.0(从 2012 年 8 月开始)中,不会出现在 2.4.0 中。

    据我所知,POI 本身已经使用 2.6.0 很长时间了,但不知何故,旧版本的库已包含在您的运行时依赖项中,需要更新。

    总结一下:在您的项目中包含 XMLBeans 2.6.0,POI 就可以正常工作。

    【讨论】:

    • 实际上 POI 仍然试图与早期版本的 XMLBeans 保持兼容,所以它应该可以工作,但似乎在最新版本中仍然被破坏,请参阅Bug 59195。正如你所说,使用 2.6.0 版本应该可以解决这里的问题。
    • 好地方。当我阅读更改日志时,我可以看到 2.3.0 仍然列为最低要求,推荐 2.6.0 - 但该错误解释了差异。
    • 更新:我尝试使用 5.3.0 版,但在这里仍然遇到同样的问题...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    相关资源
    最近更新 更多