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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-02 21:38:18  来源:igfitidea点击:

Apache POI Parsing error

javaapache-poi

提问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 PackageRelationshipCollectionand 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:

来自Apache POI 常见问题解答

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 都来自同一版本!