我如何确定 jXLS 2.3.0 需要哪个版本的 apache POI?
How can I figure out which version of apache POI is needed for jXLS 2.3.0?
这是我的 Gradle 文件:
compile 'org.apache.poi:poi:3.13'
compile 'org.jxls:jxls-jexcel:1.0.6'
compile 'org.jxls:jxls-poi:1.0.9'
compile 'org.jxls:jxls:2.3.0'
看来我使用的 apache POI 版本有误:
java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.Workbook.getCellStyleAt(S)Lorg/apache/poi/ss/usermodel/CellStyle;
at org.jxls.transform.poi.PoiTransformer.clearCell(PoiTransformer.java:224)
at org.jxls.area.XlsArea.clearCells(XlsArea.java:437)
at org.jxls.builder.xls.XlsCommentAreaBuilder.build(XlsCommentAreaBuilder.java:181)
at org.jxls.template.SimpleExporter.gridExport(SimpleExporter.java:54)
我必须显式包含另一个依赖项所依赖的依赖项是不是有点奇怪?此外,我如何才能确定我实际需要哪个版本的依赖项(POI)?
我只是想让简单的导出器示例工作:
try (InputStream is = CalXlsExporter.class.getResourceAsStream(template)) {
try (OutputStream os2 = new FileOutputStream("ExportOutput.xlsx")) {
headers = Arrays.asList(HEADERS);
Context context = new Context();
context.putVar("headers", HEADERS);
context.putVar("cell", cal);
JxlsHelper.getInstance().processTemplate(is, os2, context); //Exception inside this
}
} catch (Exception e) {
e.printStackTrace();
}
您可以随时查看 jxls-poi 模块的 Maven pom 文件,例如您可以看到 jxls-poi-1.0.9 包含对 POI 3.12 的依赖项,如 pom 属性部分
中所定义
<properties>
...
<poi.version>3.12</poi.version>
...
</properties>
可能会发生更高版本的 POI 也可以工作,但情况并非总是如此,因为它取决于 Apache POI 向后兼容性。
我会尝试简单地删除文件中对 POI 的依赖,因为无论如何 jxls 都会拖入正确版本的 POI 作为传递依赖,因此您只需要始终在应用程序中依赖 jxls,以后的更新不会导致类似的奇怪错误。
这是我的 Gradle 文件:
compile 'org.apache.poi:poi:3.13'
compile 'org.jxls:jxls-jexcel:1.0.6'
compile 'org.jxls:jxls-poi:1.0.9'
compile 'org.jxls:jxls:2.3.0'
看来我使用的 apache POI 版本有误:
java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.Workbook.getCellStyleAt(S)Lorg/apache/poi/ss/usermodel/CellStyle;
at org.jxls.transform.poi.PoiTransformer.clearCell(PoiTransformer.java:224)
at org.jxls.area.XlsArea.clearCells(XlsArea.java:437)
at org.jxls.builder.xls.XlsCommentAreaBuilder.build(XlsCommentAreaBuilder.java:181)
at org.jxls.template.SimpleExporter.gridExport(SimpleExporter.java:54)
我必须显式包含另一个依赖项所依赖的依赖项是不是有点奇怪?此外,我如何才能确定我实际需要哪个版本的依赖项(POI)?
我只是想让简单的导出器示例工作:
try (InputStream is = CalXlsExporter.class.getResourceAsStream(template)) {
try (OutputStream os2 = new FileOutputStream("ExportOutput.xlsx")) {
headers = Arrays.asList(HEADERS);
Context context = new Context();
context.putVar("headers", HEADERS);
context.putVar("cell", cal);
JxlsHelper.getInstance().processTemplate(is, os2, context); //Exception inside this
}
} catch (Exception e) {
e.printStackTrace();
}
您可以随时查看 jxls-poi 模块的 Maven pom 文件,例如您可以看到 jxls-poi-1.0.9 包含对 POI 3.12 的依赖项,如 pom 属性部分
中所定义<properties>
...
<poi.version>3.12</poi.version>
...
</properties>
可能会发生更高版本的 POI 也可以工作,但情况并非总是如此,因为它取决于 Apache POI 向后兼容性。
我会尝试简单地删除文件中对 POI 的依赖,因为无论如何 jxls 都会拖入正确版本的 POI 作为传递依赖,因此您只需要始终在应用程序中依赖 jxls,以后的更新不会导致类似的奇怪错误。