java poi cell.getCellTypeEnum() 日期处理的问题

一般情况我们在获取单元格值的时候  会通过 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);
    }
发布了59 篇原创文章 · 获赞 11 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/zhangjianming2018/article/details/98492830