简体   繁体   English

Apache Poi 4.1.2 和 net.sf.jxls (jxls-core 1.0.6) 之间的兼容性

[英]Compatibility between Apache Poi 4.1.2 and net.sf.jxls (jxls-core 1.0.6)

I need to know if those libraries mentioned in the title are compatible between each other.我需要知道标题中提到的那些库是否相互兼容。 What I need to do is to change libraries: from net.sf.jxls to org.jxls 2.10.0 (and therefore adapt the implementation that was made using jxls-core 1.0.6 ).我需要做的是更改库:从net.sf.jxlsorg.jxls 2.10.0 (并因此调整使用jxls-core 1.0.6制作的实现)。 I'm working with java 8.我正在使用 java 8。

According to the implementation that I need to adapt, jxls is used by first instanciating and XLSTransformer object: XLSTransformer transformer = new XLSTransformer();根据我需要适应的实现,首先实例化和XLSTransformer使用jxls object: XLSTransformer transformer = new XLSTransformer(); Then, the method ' transformXLS(...) ' is called which receives an InputStream as parameter and a Map, and returns a Workbook object .然后,调用方法“ transformXLS(...) ”,接收InputStream 作为参数和 Map,并返回工作簿 object

Is there a similar method or some kind of 'work-around' in jxls 2.10.0 to perform exactly the same? jxls 2.10.0 中是否有类似的方法或某种“解决方法”来执行完全相同的操作? What I need to know is a way to return a Workbook object using jxls 2.10.0 in order to adapt the implementation done with jxls-core 1.0.6我需要知道的是一种使用 jxls 2.10.0 返回工作簿 object 的方法,以适应使用 jxls-core 1.0.6 完成的实现

While jxls1 does not directly support POI4, it is easy to modify it for this purpose.虽然 jxls1 不直接支持 POI4,但很容易为此目的对其进行修改。

You basically have to edit these classes (in jxls-core):您基本上必须编辑这些类(在 jxls-core 中):

  • net/sf/jxls/parser/Cell.java net/sf/jxls/parser/Cell.java
  • net/sf/jxls/parser/CellParser.java net/sf/jxls/parser/CellParser.java
  • net/sf/jxls/transformer/CellTransformer.java net/sf/jxls/transformer/CellTransformer.java
  • net/sf/jxls/transformer/XLSTransformer.java网络/sf/jxls/transformer/XLSTransformer.java
  • net/sf/jxls/util/TagBodyHelper.java网络/sf/jxls/util/TagBodyHelper.java
  • net/sf/jxls/util/Util.java网络/sf/jxls/util/Util.java

You need minor changes on them, eg:您需要对它们进行细微更改,例如:

XLSTransformer.java: line 484, change XLSTransformer.java:484行,改

if (cell != null && cell.getCellType() == Cell.CELL_TYPE_STRING) {

to

if (cell != null && cell.getCellType() == CellType.STRING) {

so basically all changes are minor changes.所以基本上所有的变化都是微小的变化。 You can find the jxls1 code with POI 4 support here: https://github.com/infofabrik/reportserver/tree/main/jxls-src您可以在此处找到支持 POI 4 的 jxls1 代码: https://github.com/infofabrik/reportserver/tree/main/jxls-src

We are also working on sending this code to the jxls team.我们也在努力将此代码发送给 jxls 团队。 But you can of course use the classes available in the link.但是您当然可以使用链接中提供的课程。

I also recently upgraded from 1.x to 2.x of JXLS and ran into this issue.我最近还从 JXLS 的 1.x 升级到 2.x 并遇到了这个问题。 I used this code to take an input stream of an Excel file, then process the template with a Map of <String, Object> entries, and finally retrieve the workbook.我使用此代码获取 Excel 文件的输入 stream,然后使用 <String, Object> 条目的 Map 处理模板,最后检索工作簿。

PoiTransformer transformer = PoiTransformer.createTransformer(is);
JxlsHelper.getInstance().processTemplate(new Context(yourStringObjectMap), transformer);
Workbook workbook = transformer.getWorkbook();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM