JexcelApi和POI导入Excel日期识别成数字的解决方案

本文详细解析了使用Jxl或POI导入Excel信息时,遇到的日期格式单元格误识别为数字的问题,并提供了两种有效的解决方法。通过分析Excel内部存储机制,我们发现日期单元格实际上被存储为数字。为了准确识别这些日期单元格,文章介绍了使用HSSFDateUtil.isCellDateFormatted(cell)和强制转换为XFRecord的方法。这将帮助开发者避免在数据处理过程中出现错误,确保日期数据的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用过Jxl或者POI导入Excel信息的朋友应该都遇到过这样的问题。日期格式的单元格有些会识别成数字单元格。(为什么说有些呢?因为在Excel文件中输入2008-3-18的日期可以正确导入,但是输入3-18的就会识别成数字。)关于这个问题我找了很久,都没有找到解答。现在解决了,所以记录以下,一是怕以后忘了,二是希望遇到这个问题的朋友可以少走弯路。

首先来分析一下这个问题的成因。既然两个开源包都有同样的问题,说明可能是Excel内部就是这样存储的。所以需要通过一些其他的方式来从NUMERIC Cell中把这些日期找出来。

有两种方式可以辨别NUMERIC Cell储存的是否是日期:

方法一:如果用的是POI,可以直接用HSSFDateUtil.isCellDateFormatted(cell)这个方法。

Java代码

caseHSSFCell.CELL_TYPE_NUMERIC:

if(HSSFDateUtil.isCellDateFormatted(cell)){

doubled=cell.getNumericCellValue();

Datedate=HSSFDateUtil.getJavaDate(d);

}


方法二:如果用的是Jxl,可以将cell.getCellFormat 强制转换成 XFRecord。然后判断XFRecord.formatIndex 如果等于 58就是DateCell。
Java代码

if(cell.getType()==CellType.NUMBER){

NumberCellnc=(NumberCell)cell;

XFRecordxfr=(XFRecord)nc.getCellFormat();

finalintINDEX_OF_DATE=58;

if(xfr.formatIndex==INDEX_OF_DATE){

Datedate=HSSFDateUtil.getJavaDate(nc.getValue());

content=dateformat.format(date);

}

}


得到的这个double不能直接拿来用。转换可以用HSSFDateUtil.getJavaDate(double date)这个方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值