码迷,mamicode.com
首页 > 其他好文 > 详细

使用poi-3.0.2解析Excel中的公式报错ClassNotFoundException ..HSSFFormulaEvaluator

时间:2021-03-15 10:41:23      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:pac   ada   其他   row   dex   模块   总结   提示   选择   

此文仅为记录一次apache-poi解析导入数据时所遇到的问题,并为出现这种问题的童鞋提供一个可能的解决思路。
运行环境记录:

1.jdk1.7(版本比较旧)
2.poi-3.0.2-FINALL

1.报错日志记录,先上截取的报错日志

java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	......	
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFFormulaEvaluator
	at com.zimax.newacquisconfig.ExportExcel.importData(DaylyDataService.java:660)
	at com.zimax.newacquisconfig.DaylyDataService.dataImport(DaylyDataService.java:86)
	... 65 more
Caused by: java.lang.ClassNotFoundException: org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
	... 67 more
[rms][2021-03-12 15:45:19,703][ERROR][com.zimax.newacquisconfig.dynamic.importDynamicData_biz:258] [Name=com.zimax.newacquisconfig.dynamic.importDynamicData.biz][activity name=导入业务字典][activity id=invokeSpring0] throw an exception:java.lang.Exception,exception :
ErrCode: 19103002
Message: 调用Spring Bean方法出错
	at com.zimes.spring.invoker.SpringInvoker.invoke(SpringInvoker.java:50)
	......
	at com.mes.access.http.UserLoginCheckedFilter.doIntercept(UserLoginCheckedFilter.java:102)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at com.zimes.spring.invoker.SpringInvoker.invoke(SpringInvoker.java:47)
	... 60 more
Caused by: java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFFormulaEvaluator
	at com.zimax.newacquisconfig.ExportExcel.importData(DaylyDataService.java:660)
	at com.zimax.newacquisconfig.DaylyDataService.dataImport(DaylyDataService.java:86)
	... 65 more
Caused by: java.lang.ClassNotFoundException: org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
	... 67 more

2.原因分析

由于项目是一个旧项目,使用的jdk和相关的工具类也比较老旧=_=||.出现错误后我第一时间在网络上搜索了一番,发现大部分的文章使用的版本都比较新颖最低的也是使用的poi-3.0.9。鉴于此种情况,我在借鉴了NoClassDefFoundError: org/apache/poi.../FileMagic文章后想到可能是缺少了某个依赖jar包导致的报错。于是到maven仓库中搜索apache+poi,在仓库中未发现poi-3.0.9有依赖其他poi系列jar包(除了基础的日志依赖外)。这个时候只能到官网看看文档中有没有提到
额外的依赖项了。在官方文档中并未找到提示说有需要引入额外jar包。Formula Evaluation(公式演算),于是我便怀疑是系统使用的jar包版本太旧导致的问题。在和Leader沟通后,得到了回复,可以先尝试引入新的jar包替换原jar包,但是替换后必须经过严格的测试,绝对不能影响系统已有功能。于是我结合系统使用的jdk版本选择了poi-3.6贴出测试jar包使用完整性与引入jar包更新后对原系统的影响部分代码:

public static void main(String [] args){
  Logger logger = TraceLoggerFactory.getLogger(ExportExcel.class);//此处为了测试替换成新版本的日志jar包后对系统的影响
  HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(new HSSFWorkbook());//此处为了模拟实际解析完上传的Excel后生成的Workbook对象
}

3.解决办法

经过测试,引入比较新版的jar包后,对原系统功能无影响,各功能模块均正常运行。于是决定替换掉原先使用的jar包, 替换的各jar包版本如下:

/**
  poi-3.0.2-FINAL.jar ====> poi-3.6.jar
  log4j-1.1.18.jar ====> log4j-1.2.13
  commons-loggin-1.0.8 ====> commons-logging-1.1
**/

总结

遇到此类使用的工具包版本比较老旧,官方也不提供相关支持时,可以考虑在不影响原先系统功能的情况下,升级相关工具jar包.这可能是这种问题最快的解决办法。

使用poi-3.0.2解析Excel中的公式报错ClassNotFoundException ..HSSFFormulaEvaluator

标签:pac   ada   其他   row   dex   模块   总结   提示   选择   

原文地址:https://www.cnblogs.com/xiaozhusuisuinian/p/14525917.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!