Apache POI工作簿抛出java.lang.reflect.InvocationTargetException

o.o*_*o.o 1 java excel apache-poi

我试图Workbook用这段代码实例化一个:

Workbook workbook = WorkbookFactory.create(new File(excelWorkbookFilePath));
Run Code Online (Sandbox Code Playgroud)

我是这样做的,因为工作簿可以是.xlsx.xls.但是,它最终会抛出此错误:

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:249)
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:293)
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:252)
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:231)
    at com.iconectiv.handle.ExcelHandle.<init>(ExcelHandle.java:43)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:56)
    at org.apache.poi.POIXMLFactory.createDocumentPart(POIXMLFactory.java:62)
    ... 9 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)
    ... 15 more
Run Code Online (Sandbox Code Playgroud)

我做了一些研究,发现这InvocationTargetException不是真正的例外,所以我试着用这catch句话来抓住它:

} catch (InvocationTargetException e) {
    e.getCause().printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

但是,我在Eclipse中遇到一个错误,说我无法捕获它,因为它永远不会抛出任何东西.为什么我收到此错误?任何帮助将不胜感激,提前谢谢!

注意:我使用的是Apache POI 3.14.

VGa*_*aur 7

抛出的实际错误是 NoSuchMethodError: org.apache.xmlbeans.XmlOptions.setLoadEntityBytesLimit(I)Lorg/apache/xmlbeans/XmlOptions;

您可能在类路径中没有xmlbean jar,或者您可能有多个版本的jar

  • 我正在使用POI 4.0和xmlbeans 2.6.0仍然收到相同的错误..任何想法的家伙? (2认同)