【问题标题】:Java reading an Excel fileJava 读取 Excel 文件
【发布时间】:2016-05-31 17:09:59
【问题描述】:

我相信我拥有我需要的所有 jar 文件,但我仍然收到一个错误,上面写着 Caused by:

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-schemas-3.14-20160307.jar
poi-scratchpad-3.14-20160307.jar
xmlbeans-2.3.0.jar

【问题讨论】:

  • ...紧张局势上升:-) 什么是实际的跟踪/错误消息?也许这里有人擅长阅读……
  • 问题区域更适合追溯。允许更多字符和行保持行????
  • 不客气,无需辩解。您的问题附近应该有一个编辑链接。评论还有一个问题,您只能在创建后五分钟内对其进行编辑。
  • 您能列出您拥有的所有相关 JAR 吗?因为我已将您的项目转换为 Maven 并添加了 poipoi-ooxml 的依赖项,并且它工作得非常好。
  • 我在问题的原始帖子中添加了它们。

标签: java excel


【解决方案1】:

如果您查看 StackTrace,您会发现异常是由以下原因引起的:

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>

【讨论】:

  • 我用那个 jar 文件更新了类路径,但没有解决问题。
  • 更新 xmlbeans-xmlpublic 到 2.6.0
  • 这是最后一个 jar 文件“将 xmlbeans-xmlpublic 更新到 2.6.0” - aleroot。谢谢大家的帮助
猜你喜欢
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多