背景
最近公司所有新項目要使用最新高效快速開發框架nature-framework,框架本身結合NatureMap已經集成excel的高效導入功能,我們要實現高性能的導出功能,因為最新的jxls-2.3.0.jar在模版導出上做了很大的優化,所以我們考慮使用最新jxls-2.3.0.jar工具借助最新的poi-3.16.jar進行導出表格。
悲劇的是我們把官方的所有依賴jar包全部引進,結果卻不能正常使用。。。
異常內容
Exception in thread "main" 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.util.JxlsHelper.processTemplate(JxlsHelper.java:100)
at org.jxls.util.JxlsHelper.processTemplate(JxlsHelper.java:94)
at com.excel.demo.ExcelExport.main(ExcelExport.java:30)
尋找答案
將原來項目進行改造為maven項目進行自動下載依賴jar包,發現有部分jar包根本下載不下來(國內的大局域網...),無奈放棄。
后面經過多次的百度和谷歌,以及多次進入stackoverflow未能解決問題,這種異常一般是是缺少jar包或jar包的版本不兼,jar包導入了一大堆未能解決問題,最后就從jar包的版本入手。我們都知道poi是jxls的基礎依賴,所有只可能是poi的版本太高jxls團隊還未來及對其進行兼容,因此下載各個版本的poi進行嘗試,發現3.16,3.15,3.14均不兼容,3.13未嘗試(國內下個jar包慢的不行,用翻牆工具也就幾十k),直接下載了3.12版本,經過測試終於可以使用了!
吐槽:jxls官方在每個版本中從未說明當前依賴poi的版本是多少,所以導致大量Java開發工程師在各個網站上求助此問題的解決方法。
送上導入導出excel所有必須的jar包:
- commons-jexl-2.1.1.jar
- commons-logging-1.1.3.jar
- jxls-2.3.0.jar
- jxls-poi-1.0.9.jar
- log4j-1.2.16.jar
- poi-3.12-20150511.jar
- poi-ooxml-3.12-20150511.jar
- poi-ooxml-schemas-3.12-20150511.jar
- slf4j-api-1.7.18.jar
- slf4j-log4j12-1.7.18.jar
- xmlbeans-2.6.0.jar
總結
如果后面在遇到此類異常,請先考慮版本不兼容的問題!