POI 导入Excel区分时间数值和数值
poi版本(poi-4.1.0)
java 用POI导入Excel的时候会遇到一个问题:区分时间数值和数值
获取单元格数据类型的时候,数值和时间是统一用 的 NUMERIC 枚举来区分的,
常规时间类型和数值可以用DateUtil.isCellDateFormatted(cell)来区分;
SimpleDateFormat formatDateTime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
if (DateUtil.isCellDateFormatted(cell)) {
return formatDateTime.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
}else {
return cell.getNumericCellValue();
}
但是有时候从Excel获取到的时间数据是从1900年到输入时间之间的double 时间天数,
这种情况下在用上面的方法,会把时间数值当作数值处理。
那么我们就需要区分时间数值和数值,再把时间数值做转化处理(HSSFDateUtil.getJavaDate),
区分方法:查看isCellDateFormatted,会发现里边是用单元格对象Cell的HSSFCellStyle的getFormatIndex值来区分的:
下面的format 就是Cell.getCellStyle().getDataFormat()
true就是时间。false就不是时间
pu