【使用场景】:
使用一个已经编译好的Jar包工具(无源码)对Excel文件做操作,提示下面的错误。
【错误提示】:
getNumericCellValuejava.lang.NumberFormatException: You cannot get a string value from a numeric cell
at org.apache.poi.hssf.usermodel.HSSFCell.getRichStringCellValue(HSSFCell.java:734)
【分析】:
1. POI的使用文档里已经写的很清楚了,明明一个单元格是数字型而想取出字符串来则会报这个错。如果是自己写的工具,倒也简单,从Excel取数据前判断该单元格的类型则分别使用不同的接口即可。可前提是这个程序无法修改,于是只能从Excel文件单元格式下手了。
2. 多次验证(我使用Excel版本2003),Excel里修改的单元格格式与POI认为的单元格格式貌似有差别——我把出问题的单元格的类型修改成数字型也无济于事!最后无意中按下F2(双击应该也可以)进入编辑模式,再按下回车保存后该问题就OK了。
3. 具体原因还是未知,也许跟rettar 在网易里写的这句话(【当对表内的该列数据做修改后,excel将自动修改单元格的格式】)有些关系。真的好奇怪,甚至把不会报错的单元格连格式一起拷贝至出错的单元格也无法解决问题。
参考:
1. http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFCell.html#getRichStringCellValue()
2. http://blog.163.com/rettar@126/blog/static/12165034220098301051285/