我正在制作一个用于分析某些数据的应用程序,并且结果必须在excel文件中显示。从这个意义上讲,我开始使用Apache POI(3.11)。由于某些报告要花费大量时间和内存来进行复制,因此我进行了调查,发现jxls,经过一些测试,我认为这是解决方案。但是现在我发现了一个问题:不能同时使用两个框架。
我尝试将我的一个类从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来利用使用模板。
我会很感激任何帮助或建议。
对于第一个错误,在运行应用程序时,您的类路径中似乎缺少用于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优先。
| 归档时间: |
|
| 查看次数: |
1852 次 |
| 最近记录: |