我正在努力使工作成为一段代码来读取docx文件,但由于一些奇怪的原因它失败了.
它失败了:
XWPFDocument document = new XWPFDocument(new FileInputStream(filepath));
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
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)
Run Code Online (Sandbox Code Playgroud)
我有这些罐子:
看起来它应该对我有用(我也尝试过更新的poi libs - 同样的错误).
有任何想法吗 ?
在快速浏览一下Grepcode告诉缺少方法是支持v1.1的ooxml-schemas.此外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>
Run Code Online (Sandbox Code Playgroud)
问:我正在使用poi-ooxml-schemas jar,但我的代码失败了"java.lang.NoClassDefFoundError:org/openxmlformats/schemas/something "
要使用新的OOXML文件格式,POI需要一个包含XMLBeans编译的文件格式XSD的jar.这些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包含它们.
因此,正如常见问题解答所解释的那样,在短期内用poi-ooxml-schemas较大的ooxml-schemas罐子替换小罐子.从长远来看,向Apache POI提交一个junit测试,该测试使用你想要使用的模式jar的位,然后它们将出现在下一个小poi-ooxml-schemasjar中
| 归档时间: |
|
| 查看次数: |
3892 次 |
| 最近记录: |