一般情况我们在获取单元格值的时候 会通过 cell.getCellTypeEnum() 提前判定一下单元格的类型 ,从而决定应该如何取值。
但当把单元格类型自定义的时候,出现了日期解析不出来的问题。
如出生日期这一列,我自定义格式为 yyyy-mm-dd。 但解析出来是double类型,取值为数字。
那么当程序校验日期的时候 就出现错误。
因此不得不得再次处理一次
cell.getCellStyle().getDataFormatString()来判断,这个方法会返回格式字符串,通过这个字符串去匹配,再处理。
poi获取这种自定义日期格式的时候 返回的字符串为 yyyy\-mm\-dd (注意:有反斜杠),那么程序中在判断的时候要反义一下 用双斜杠。 这样的话就能正确获取日期值了
/**
* 功能描述: 获取单元格值
*
* @param cell 单元格
* @return String
*/
public String getCellValue(Cell cell) {
String value = "";
if (cell != null){
switch (cell.getCellTypeEnum()) {
case STRING:
value = cell.getRichStringCellValue().getString();
break;
case NUMERIC:
String debug_str = cell.getCellStyle().getDataFormatString();
if ("m/d/yy".equals(cell.getCellStyle().getDataFormatString()) || "yyyy\\-mm\\-dd".equals(cell.getCellStyle().getDataFormatString())) {
value = DateUtil.dateToStringByFormat(DateUtil.FORMATTER_DATE, cell.getDateCellValue());
} else {
DecimalFormat df = new DecimalFormat("#");
value = df.format(cell.getNumericCellValue());
// value = String.valueOf(cell.getNumericCellValue());
}
break;
case BOOLEAN:
value = String.valueOf(cell.getBooleanCellValue());
break;
default:
break;
}
}
return RegexUtils.trimSpaceTag(value);
}