2016-05-31 109 views
0

我相信我有我需要的所有jar文件,我仍然收到这个说由导致错误:的Java读取Excel文件

java.lang.reflect.InvocationTargetException

原谅我,我在阅读错误信息方面仍然不太好。该错误提示的问题是与线"Workbook book = new XSSFWorkbook(stream);"

import java.io.File; 
    import java.io.FileInputStream; 
    import java.io.IOException; 
    import java.util.Iterator; 

    import org.apache.poi.ss.usermodel.Cell; 
    import org.apache.poi.ss.usermodel.Row; 
    import org.apache.poi.ss.usermodel.Sheet; 
    import org.apache.poi.ss.usermodel.Workbook; 
    import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

    public class excelReader { 
public static void main(String[] args) throws IOException{ 

    String spreadSheetFilePath = "C:\\Users\\userExample\\Documents\\forJava.xlsx"; 
    FileInputStream stream = new FileInputStream(new File(spreadSheetFilePath)); 

    Workbook book = new XSSFWorkbook(stream); 
    Sheet sheetOne = book.getSheetAt(0); 
    Iterator<Row> iterator = sheetOne.iterator(); 

    while(iterator.hasNext()) { 
     Row nextRow = iterator.next(); 
     Iterator<Cell> cellIter = nextRow.cellIterator(); 

     while(cellIter.hasNext()) { 
     Cell cell = cellIter.next(); 

     switch (cell.getCellType()) { 
     case Cell.CELL_TYPE_STRING: 
      System.out.print(cell.getStringCellValue()); 
      break; 
     case Cell.CELL_TYPE_BOOLEAN: 
      System.out.print(cell.getBooleanCellValue()); 
      break; 
     case Cell.CELL_TYPE_NUMERIC: 
      System.out.print(cell.getNumericCellValue()); 
      break; 
     } 
     System.out.print(" - "); 
     } 
     System.out.println(); 
    } 
    book.close(); 
    stream.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 excelReader.main(excelReader.java:18) 
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 

Jar文件在我的图书馆项目:

commons- codec-1.10.jar
commons-logging1-2.jar
的dom4j-1.1.jar
的JUnit 4.1.2.17.jar
POI-3.14-20160307.jar
POI-excelant-3.14-20160307.jar
POI-OOXML-架构 - 3.14-20160307.jar
POI暂存器-3.14-20160307.jar
的xmlbeans-2.3.0.jar

+1

...张力升高:-)什么** **是实际跟踪/错误信息?也许这里有人擅长阅读它...... – Dilettant

+0

问题区域更适合追溯。允许更多字符和行保持行 – Dilettant

+0

欢迎您,不需要找借口。应该有一个编辑链接接近你的问题。评论还有其他问题,您只能在创建后不超过五分钟才能对其进行编辑。 – Dilettant

回答

0

如果你看一下堆栈跟踪,你可以发现异常的原因是:

java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.setLoadEntityBytesLimit(I)Lorg/apache/xmlbeans/XmlOptions; 

基于该我认为你需要的:的xmlbeans-xmlpublic-2.6.0.jar类路径中,尝试这种额外的jar添加到类路径,然后再试一次......

我建议管理使用Maven的依赖,这将简化一切,只需切换到Maven和添加以下行到你的POM文件:

<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi</artifactId> 
    <version>3.14</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi-ooxml</artifactId> 
    <version>3.14</version> 
</dependency> 
+0

我用那个jar文件更新了类路径,但没有解决问题。 – Sam

+0

将xmlbeans-xmlpublic更新到2.6.0 – aleroot

+0

这是最后一个jar文件“将xmlbeans-xmlpublic更新为2.6.0” - aleroot。感谢大家的帮助 – Sam