java Apache POI 解析错误
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/33415904/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Apache POI Parsing error
提问by beingsuplab
I know this question has been asked often, but couldn't find a suitable solution. When working with
我知道这个问题经常被问到,但找不到合适的解决方案。当与
XWPFDocument xdoc = new XWPFDocument(srcFile);
or
或者
XSSFWorkbook workbook = new XSSFWorkbook(srcFile);
I always end up with the following error:
我总是以以下错误结束:
Exception in thread "main" java.lang.IllegalAccessError: tried to access method org.apache.poi.util.POILogger.log(ILjava/lang/Object;)V from class org.apache.poi.openxml4j.opc.PackageRelationshipCollection
at org.apache.poi.openxml4j.opc.PackageRelationshipCollection.parseRelationshipsPart(PackageRelationshipCollection.java:313)
at org.apache.poi.openxml4j.opc.PackageRelationshipCollection.<init>(PackageRelationshipCollection.java:163)
at org.apache.poi.openxml4j.opc.PackageRelationshipCollection.<init>(PackageRelationshipCollection.java:131)
at org.apache.poi.openxml4j.opc.PackagePart.loadRelationships(PackagePart.java:561)
at org.apache.poi.openxml4j.opc.PackagePart.<init>(PackagePart.java:109)
at org.apache.poi.openxml4j.opc.PackagePart.<init>(PackagePart.java:80)
at org.apache.poi.openxml4j.opc.PackagePart.<init>(PackagePart.java:125)
at org.apache.poi.openxml4j.opc.ZipPackagePart.<init>(ZipPackagePart.java:78)
at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:243)
at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:684)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:275)
at org.apache.poi.util.PackageHelper.open(PackageHelper.java:37)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:266)
People have suggested to open PackageRelationshipCollection
and retry. But that didn't help much.
人们建议打开PackageRelationshipCollection
并重试。但这并没有多大帮助。
Also I have the jars loaded :
我也装了罐子:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.13</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.13</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.12</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.11</version>
<type>jar</type>
</dependency>
回答by Gagravarr
From the Apache POI FAQ:
Can I mix POI jars from different versions?
No. This is not supported.
All POI jars in use must come from the same version. A combination such as poi-3.11.jar and poi-ooxml-3.9.jar is not supported, and will fail to work in unpredictable ways.
我可以混合不同版本的 POI 罐子吗?
不。这不受支持。
使用的所有 POI jar 必须来自同一版本。不支持 poi-3.11.jar 和 poi-ooxml-3.9.jar 等组合,并且将无法以不可预测的方式工作。
Your pom has dependencies on Apache POI jars from 3.11, 3.12 and 3.13, which as the FAQ explained isn't supported
您的 pom 依赖于 3.11、3.12 和 3.13 中的 Apache POI jar,如常见问题解答所述,不支持
You need to change all of those to be 3.13, then it'll work
您需要将所有这些更改为 3.13,然后它会起作用
I'd suggest something like:
我建议如下:
<properties>
<poi.version>3.13</poi.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
<!-- etc as needed -->
That way, you can ensure all your POI jars are from the same version!
这样,您可以确保所有 POI jar 都来自同一版本!