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

新版POI如何获取日期类型的cell的值

时间:2017-04-06 20:02:56      阅读:5294      评论:0      收藏:0      [点我收藏+]

标签:返回   9.png   还需   image   simple   针对   方法   单元格   val   

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

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

 

网上大部分的方法是:
cell.getCellType()
但是在新版的POI中,比如3.15版,这个写法已经被放弃使用了。由于项目需要在下不能调整jar包,只好硬着头皮去解决。

技术分享

 

后来发现了一个方法:
cell.getCellStyle().getDataFormatString() 可以判断单元格的格式类型,如下图

技术分享


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

if("yyyy/mm;@".equals(cell.getCellStyle().getDataFormatString()) || "m/d/yy".equals(cell.getCellStyle().getDataFormatString())
        || "yy/m/d".equals(cell.getCellStyle().getDataFormatString()) || "mm/dd/yy".equals(cell.getCellStyle().getDataFormatString())
        || "dd-mmm-yy".equals(cell.getCellStyle().getDataFormatString())|| "yyyy/m/d".equals(cell.getCellStyle().getDataFormatString())){
    return new SimpleDateFormat("yyyy/MM/dd").format(cell.getDateCellValue());
}

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

 

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

技术分享

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

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

 

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

 

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

 

新版POI如何获取日期类型的cell的值

标签:返回   9.png   还需   image   simple   针对   方法   单元格   val   

原文地址:http://www.cnblogs.com/acm-bingzi/p/6674834.html

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