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

我正在尝试用此代码实例化Workbook

 Workbook workbook = WorkbookFactory.create(new File(excelWorkbookFilePath)); 

我这样做,因为工作簿可以是.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 

我做了一些研究,发现InvocationTargetException不是真正的exception,所以我试图用这个catch语句来捕获它:

 } catch (InvocationTargetException e) { e.getCause().printStackTrace(); } 

不过,我在Eclipse中发现一个错误,说我无法捕捉它,因为它从来没有抛出任何东西。 为什么我得到这个错误? 任何帮助将不胜感激,在此先感谢!

注意:我正在使用Apache POI 3.14。

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

可能性您的类path中没有xmlbean jar,或者您可能有多个jar版本

您可以根据文件名分别为.xls和.xlsx扩展名实例化工作簿:

 Workbook wb = null; if (fileName.endsWith(".xlsx")) { wb = new XSSFWorkbook(in); }else{ fs = new POIFSFileSystem(in); wb = (Workbook) new HSSFWorkbook(fs); } 

我在这一行得到相同的错误:workbook = new XSSFWorkbook(fis); 为您提供跟踪 –

dataTable = new XlReader(System.getProperty(“user.dir”)+“/src/test/java/testDataDriverOM.xlsx”);

 public XlReader(String path) { this.path = path; try { fis = new FileInputStream(path); workbook = new XSSFWorkbook(fis); sheet = workbook.getSheetAt(0); fis.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } 

excel文件的扩展名为.xlsx,我在我的类path中。 没有重复的jar文件。 我仍然得到错误。