gpt4 book ai didi

apache-poi - 我可以同时使用 jxls 和 apache poi 吗?

转载 作者:行者123 更新时间:2023-12-04 00:34:14 25 4
gpt4 key购买 nike

我正在制作一个应用程序来分析一些数据,结果必须以 excel 文件的形式呈现。从这个意义上说,我开始使用 Apache POI (3.11)。由于某些报告需要花费大量时间和内存才能重现,我进行了调查并找到了 jxls,经过一些测试后我认为是解决方案。但是现在我发现了一个问题:不能同时使用两个框架。

  1. 我必须将 Apache POI 从 3.11 更新到 3.14,以便使用 jxls-2.3.0
  2. 为了用 jxls 进行测试,我做了一个额外的包,没问题
  3. 我尝试将我的一个类从 Apache POI 迁移到 jxls,但我收到此错误:java.lang.IllegalStateException:无法加载 XLS 转换器。请确保 Transformer 实现在类路径中。这是我的方法的代码:

    private void prepareNewReport(File excelFile) {
    List perforaciones = makePerforacionReport
    .makePerforacionData(escenario);

    <pre><code>try (InputStream is = ReportePerforacionTotalDialog.class
    .getResourceAsStream("PerforacionTotal_template.xls")){
    try (OutputStream os = new FileOutputStream(excelFile)) {
    Context context = new Context();
    context.putVar("perforaciones", perforaciones);
    JxlsHelper.getInstance().processTemplate(is, os, context);
    LOGGER.logger.log(Level.INFO, "Archivo de perfortacion generado con éxito");
    }
    } catch (IOException e) {
    LOGGER.logger.log(Level.SEVERE, "Problemas buscando el archivo", e);
    }
    </code></pre>

    }

这怎么可能?在同一个项目中,我有我的测试类,只是另一个包,它工作正常。如您所见,它与 jxls 页面中的示例并没有太大区别,而且导入是相同的。

但更糟糕的是,当我尝试清理并构建我的项目时,我遇到了另一个错误:

java.lang.RuntimeException: com.sun.tools.javac.code.Symbol$CompletionFailure: class file for org.openxmlformats.schemas.officeDocument.x2006.docPropsVTypes.CTArray not found

我查看了为使用 jxls 和 apache poi 而导入的每个库,没错,那个类不存在。为了查看这两个框架之间是否存在冲突,我从类路径中删除了所有需要使用 jxls 的库。清理并再次构建,没问题,我有 .jar 文件要发送给我的客户,但不完整。

我可以尝试替换所有使用 Apache POI 的类,但这意味着很多工作,因为我的项目中使用 POI 多次读取包含数据的 excel 文件,并将另外许多文件写入 excel。我计划使用 jxls 以利用使用模板。

我会感谢任何帮助或建议。

最佳答案

对于第一个错误,在运行应用程序时,您的类路径中似乎缺少 Apache POI 的 JXLS 转换器。在此处查看 JXLS 入门信息:http://jxls.sourceforge.net/getting_started.html

As it is explained in Transformers section (see Main Concepts)) Jxls core module does not depend on any specific Java-Excel library and works with Excel exclusively through a predefined interface. Currently Jxls supplies two implementations of this interface in separate modules based on the well-known Apache POI and Java Excel API libraries.

如果您使用的是 Maven,请务必在您的 pom.xml 中包含 JXLS 入门页面上列出的 jxls-poi 依赖项:

<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-poi</artifactId>
<version>1.0.9</version>
</dependency>

对于第二个问题,org.openxmlformats.schemas.officeDocument.x2006.docPropsVTypes.CTArray 不在 3.11 的 apache POI ooxml 模式 jar 文件中(poi-ooxml-schemas-3.11- 20141221.jar) 或 3.14 (poi-ooxml-schemas-3.14-20160307.jar)。 POI 使用一组精简的 ooxml 模式类,您需要从 http://central.maven.org/maven2/org/apache/poi/ooxml-schemas/1.3/ 获取 ooxml 模式的完整 jar。或者,如果您使用的是 Maven(或其他构建工具),请从 https://mvnrepository.com/artifact/org.apache.poi/ooxml-schemas/1.3 获取构建的依赖项

例如,对于 maven:

<!-- https://mvnrepository.com/artifact/org.apache.poi/ooxml-schemas -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.3</version>
</dependency>

请务必从您的 maven pom.xml 中删除 poi-ooxml-schemas 依赖项,以便上面的 ooxml-schemas 优先。

关于apache-poi - 我可以同时使用 jxls 和 apache poi 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38256614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com