各位大佬,我用poi读取poi导入excel数据内存溢出,当我读取一个有计算公式的单元格值是#VALUE!是怎么回事呢?

使用POI读取Excel值的同学,一定为日期类型抓狂过!

POI对单元格日期处理很弱,没有针对的类型,日期类型取出来的也是一个double值,所以同样作为数值类型。即使使用cell.setCellType(CellType.STRING) 也还是会返回一个数字

但是在新版的POI中,比如3.15版,这个写法已经被放弃使用了。由于项目需要在下不能调整jar包,只好硬着头皮去解决。


于是便可以使用如下方法判断:

使用这个方法判断的格式有限,如果能够限定单元格格式的话,这样是足够解决的。

但我的项目坑爹的是Excel中的日期格式也是不固定的,还需要另谋出路。
在调试的时候发现,明明就显示着这个cell的值,是个日期。

如上图,这个日期【31-一月-2005】并不在这个cell下的某一个子元素里,至少我找了很久是没找到。只能使用cell.toString() 得到

最后我的解决办法是:首先使用了cell.getCellStyle().getDataFormatString()判断,如果能得到就返回“yyyy/MM/dd”格式的日期。如果得不到,最后都返回cell.toString()。这样至少不会返回一个数字了,也不知道对其他类型的单元格有没有影响,目前跑了几张表没有报错

这种解决办法当然是不好的,肯定是有一种好的方法我没找到,如果哪位大侠找到了,烦请告知一声,在下拜谢了!


到最后果然还是找我麻烦了,【31-一月-2005】格式不行,必须转成“yyyy/MM/dd”格式。

然后想,要不写个正则表达式,通过判断字符串的方式,来判断出这种日期类型。坑爹了,正则不会写。。。。。。。明明感觉很简单的,就是不对

再然后,耍小聪明,改成通过使用java中的字符串分割一点点判断,先放代码:

2 * 分多种格式解析单元格的值 8 //如果为null会抛出异常,应当返回空字符串 12 //POI对单元格日期处理很弱,没有针对的类型,日期类型取出来的也是一个double值,所以同样作为数值类型 13 //解决日期格式读入后出错的问题,POI读取后变成“02-十一月-2006”格式 29 * 判断是否是“02-十一月-2006”格式的日期类型

同学们慢慢理解吧,代码虽然挫了一点,也不能保证完全正确,但至少这种情况下是可以使用的。

原创文章,欢迎转载,转载请注明出处!

EasyExcel是一个基于Java的简单、省的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。

  • 点击"Excel文件下载", 查看下载文件.

  • 读取前端页面上传的Excel是成功了 , 但是中文乱码问题有待解决.



我要回帖

更多关于 poi导入excel数据内存溢出 的文章

 

随机推荐