首页 文章

java.lang.NoSuchMethodError:org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl.getTrList()使用Apache POI库时的Ljava / util / List

提问于
浏览
3

我正在努力使工作成为一段代码来读取docx文件,但由于一些奇怪的原因它失败了 .

它失败了:

XWPFDocument document = new XWPFDocument(new FileInputStream(filepath));

堆栈跟踪:

Exception in thread "main" java.lang.NoSuchMethodError: org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl.getTrList()Ljava/util/List;
    at org.apache.poi.xwpf.usermodel.XWPFTable.<init>(XWPFTable.java:106)
    at org.apache.poi.xwpf.usermodel.XWPFDocument.onDocumentRead(XWPFDocument.java:151)
    at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:159)
    at org.apache.poi.xwpf.usermodel.XWPFDocument.<init>(XWPFDocument.java:124)
    at helper.JavaHelper.readTableDataFull(JavaHelper.java:84)
    at helper.JavaHelper.main(JavaHelper.java:138)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

我有这些 jar :

  • dom4j-1.6.1.jar

  • xmlbeans-2.3.0.jar

  • poi-3.9-20121203.jar

  • poi-scratchpad-3.9-20121203.jar

  • poi-ooxml-3.9-20121203.jar

  • ooxml-schemas-1.0.jar

看起来它应该对我有用(我也尝试过更新的poi libs - 同样的错误) .

有任何想法吗 ?

2 回答

  • 5

    快速查看Grepcode告诉 ooxml-schemasv1.1 支持缺少的方法 . 此外 v1.0 似乎不包含这样的方法(它只包含 getTrArray() 方法) .

    所以你可能想使用 ooxml-schemas-1.1.jar 而不是 ooxml-schemas-1.0.jar .

    这是你应该至少使用的版本的maven依赖:

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>ooxml-schemas</artifactId>
        <version>1.1</version>
    </dependency>
    
  • 5

    引用Apache POI FAQ page

    问:我正在使用poi-ooxml-schemas jar,但我的代码失败了“java.lang.NoClassDefFoundError:org / openxmlformats / schemas / something”要使用新的OOXML文件格式,POI需要一个包含文件格式XSD,由XMLBeans编译 . 这些XSD一旦编译成Java类,就会存在于org.openxmlformats.schemas命名空间中 . 有两个jar文件可用,如组件概述部分所述 . 所有模式的完整jar都是ooxml-schemas-1.1.jar,目前大约是15mb . 较小的poi-ooxml-schemas jar只有4mb左右 . 后一个jar文件只包含通常使用的部分 . 许多用户选择使用较小的poi-ooxml-schemas jar来节省空间 . 但是,poi-ooxml-schemas jar只包含通常使用的XSD和类,如单元测试所标识的那样 . 每隔一段时间,您可能会尝试使用未包含在最小poi-ooxml-schemas jar中的部分文件格式 . 在这种情况下,您应该切换到完整的ooxml-schemas-1.1.jar . 从长远来看,您可能还希望提交一个新的单元测试,该测试使用XSD的额外部分,以便将来的poi-ooxml-schemas jar包含它们 .

    因此,正如常见问题解答所解释的那样,在短期内用较大的 ooxml-schemas jar替换小 poi-ooxml-schemas jar . 从长远来看,向Apache POI提交一个junit测试,它使用你想要使用的架构jar的位,然后它们将出现在下一个小的 poi-ooxml-schemas jar中 .

相关问题