我可以同时使用 jxls 和 apache poi 吗?
May I use jxls and apache poi together?
我正在制作一个分析一些数据的应用程序,结果必须显示在 excel 文件中。从这个意义上说,我开始使用 Apache POI (3.11)。由于某些报告需要花费大量时间和内存才能重现,我进行了调查并找到了 jxls,经过一些测试后我认为是解决方案。但是现在我发现了一个问题:不能同时使用两个框架。
- 我必须将 Apache POI 从 3.11 更新到 3.14,以便使用 jxls-2.3.0
- 为了用 jxls 进行测试,我做了一个额外的包,没问题
我尝试将我的一个 classes 从 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);
<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);
}
}
这怎么可能?在同一个项目中,我有我的测试 class,只是另一个包,它工作正常。如您所见,它与 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 而导入的每个库,没错,class 不存在。为了查看这两个框架之间是否存在冲突,我从 class 路径中删除了使用 jxls 所需的所有库。清理并再次构建,没问题,我有 .jar 文件要发送给我的客户,但不完整。
我可以尝试替换所有使用 Apache POI 的 classes,但这意味着很多工作,因为我的项目中使用 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 (poi-ooxml-schemas-3.11-20141221.jar) 或 3.14 (poi-ooxml-模式-3.14-20160307.jar)。 POI 使用一组精简的 ooxml 模式 类,您需要从 http://central.maven.org/maven2/org/apache/poi/ooxml-schemas/1.3/ or if you're using maven (or another build tool), get the dependency for your build from https://mvnrepository.com/artifact/org.apache.poi/ooxml-schemas/1.3
获取 ooxml 模式的完整 jar
例如,对于 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 中删除 poi-ooxml-schemas 依赖项 pom.xml 以便上面的 ooxml-schemas 优先。
我正在制作一个分析一些数据的应用程序,结果必须显示在 excel 文件中。从这个意义上说,我开始使用 Apache POI (3.11)。由于某些报告需要花费大量时间和内存才能重现,我进行了调查并找到了 jxls,经过一些测试后我认为是解决方案。但是现在我发现了一个问题:不能同时使用两个框架。
- 我必须将 Apache POI 从 3.11 更新到 3.14,以便使用 jxls-2.3.0
- 为了用 jxls 进行测试,我做了一个额外的包,没问题
我尝试将我的一个 classes 从 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); <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); }
这怎么可能?在同一个项目中,我有我的测试 class,只是另一个包,它工作正常。如您所见,它与 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 而导入的每个库,没错,class 不存在。为了查看这两个框架之间是否存在冲突,我从 class 路径中删除了使用 jxls 所需的所有库。清理并再次构建,没问题,我有 .jar 文件要发送给我的客户,但不完整。
我可以尝试替换所有使用 Apache POI 的 classes,但这意味着很多工作,因为我的项目中使用 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 (poi-ooxml-schemas-3.11-20141221.jar) 或 3.14 (poi-ooxml-模式-3.14-20160307.jar)。 POI 使用一组精简的 ooxml 模式 类,您需要从 http://central.maven.org/maven2/org/apache/poi/ooxml-schemas/1.3/ or if you're using maven (or another build tool), get the dependency for your build from 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 中删除 poi-ooxml-schemas 依赖项 pom.xml 以便上面的 ooxml-schemas 优先。