java - Apache POI 解析错误

标签 java apache-poi

我知道这个问题经常被问到,但找不到合适的解决方案。 与

一起工作时
XWPFDocument xdoc = new XWPFDocument(srcFile);

XSSFWorkbook workbook = new XSSFWorkbook(srcFile);

我总是遇到以下错误:

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)

人们建议打开 PackageRelationshipCollection 并重试。但这并没有太大帮助。

我还加载了 jar :

<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>

最佳答案

来自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.

您的 pom 依赖于 3.11、3.12 和 3.13 的 Apache POI jar,即 the FAQ explained isn't supported

你需要将所有这些更改为 3.13,然后它会工作

我建议像这样:

<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 -->

这样,您可以确保所有 POI jar 都来自同一版本!

关于java - Apache POI 解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33415904/

相关文章:

grails - 在Grails应用程序中使用Apache POI生成PPT

c# - 如何 IKVM Apache POI

java - Tablecell 内的表 - 使用 Apache POI 的嵌套表

java - 未经编辑,无法在 pptx 中的 BarChart 中查看 Apache POI 更新的数据值

java - 如何在构建期间仅列出 Gradle 中的 runtimeClasspath 解析依赖项?

java - 我应该在哪里放置安装程序资源(wxs 文件、dmg 脚本、图标)以及在部署自包含应用程序时如何配置 maven antrun

java - 找出数字之间的阿姆斯特朗数

java - 如何重写 Java API 中的类,从而使用反射改变它们的行为?

java - 读取多个excel文件并将数据推送到java中的各个对象,寻找有效的方法

java - 如何在 SWT Canvas 中显示快速变化的图像? (没有快速调用 paintControl() 监听器方法)