我可以一起使用jxls和apache poi吗?

Jos*_*llo 2 apache-poi jxls

我正在制作一个用于分析某些数据的应用程序,并且结果必须在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: Cannot load XLS transformer. Please make sure a Transformer implementation is in classpath。这是我的方法的代码:

    private void prepareNewReport(File excelFile) {
        List perforaciones = makePerforacionReport
                                                .makePerforacionData(escenario);
    
    
    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);
    }
    
    Run Code Online (Sandbox Code Playgroud) }
    Run Code Online (Sandbox Code Playgroud)

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

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

java.lang.RuntimeException: com.sun.tools.javac.code.Symbol$CompletionFailure: class file for org.openxmlformats.schemas.officeDocument.x2006.docPropsVTypes.CTArray not found
Run Code Online (Sandbox Code Playgroud)

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

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

我会很感激任何帮助或建议。

Fin*_*O'B 5

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

正如“变形金刚”部分所述(请参阅主要概念)中所述,Jxls核心模块不依赖于任何特定的Java-Excel库,而是通过预定义的接口专门与Excel一起使用。当前,Jxls基于著名的Apache POI和Java Excel API库在单独的模块中提供此接口的两种实现。

如果您使用的是maven,请确保在pom.xml中包括JXLS入门页面上列出的jxls-poi依赖项:

<dependency>
    <groupId>org.jxls</groupId>
    <artifactId>jxls-poi</artifactId>
    <version>1.0.9</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

对于第二个问题,org.openxmlformats.schemas.officeDocument.x2006.docPropsVTypes.CTArray不在3.11(poi-ooxml-schemas-3.11-20141221.jar)或3.14(poi-ooxml-schemas-3.14-20160307.jar)的apache POI ooxml架构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获取构建的依赖项

例如对于行家:

<!-- https://mvnrepository.com/artifact/org.apache.poi/ooxml-schemas -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>ooxml-schemas</artifactId>
    <version>1.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

确保从您的maven pom.xml中删除poi-ooxml-schemas依赖项,以便上述ooxml-schemas优先。