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

本文介绍了解决Apache POI在读取Excel文件时,遇到自定义日期格式(如yyyy-mm-dd)导致的解析问题。通过判断单元格样式中的数据格式字符串,正确转换为日期类型,避免了数值类型的误判。

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

一般情况我们在获取单元格值的时候  会通过 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);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值