美文网首页
POI获取EXCEL时间格式数据

POI获取EXCEL时间格式数据

作者: 小方块886 | 来源:发表于2021-07-01 10:24 被阅读0次

    记录一次POI读取excel列表数据时,获取到的数据是时间格式,导致数据出错问题

    注意:POI判断自定义时间格式时候,下面两种方式都是有问题的,所以不采取下面方式

    HSSFDateUtil.isCellDateFormatted(cell) 或者 DateUtil.isCellDateFormatted(cell)
    

    解决:

    public static String getCellValue(Cell cell){
            String cellValue = "";
            if (cell == null) {
                return cellValue;
            }
            // 判断数据的类型
            switch (cell.getCellType()) {
                // 数字
                case NUMERIC:
                    //处理yyyy年m月d日,h时mm分,yyyy年m月,m月d日等含文字的日期格式
                    //判断cell.getCellStyle().getDataFormat()值,解析数值格式
                    /*
                        yyyy-MM-dd----- 14
                        HH:mm:ss ---------21
                        yyyy-MM-dd HH:mm:ss ---------22
                        yyyy年m月d日--- 31
                        h时mm分 ------- 32
                        yyyy年m月------- 57
                        m月d日 ---------- 58
                        HH:mm----------- 20
                    */
                    short format = cell.getCellStyle().getDataFormat();
                    if(format == 14) {
                        Date date = cell.getDateCellValue();
                        cellValue = DateFormatUtils.format(date, "yyyy-MM-dd");
                    }else if(format == 31) {
                        Date date = cell.getDateCellValue();
                        cellValue = DateFormatUtils.format(date, "yyyy年M月d日");
                    }else if(format == 57) {
                        Date date = cell.getDateCellValue();
                        cellValue = DateFormatUtils.format(date, "yyyy年M月");
                    }else if(format == 58) {
                        Date date = cell.getDateCellValue();
                        cellValue = DateFormatUtils.format(date, "M月d日");
                    }else if(format == 20) {
                        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
                        double value = cell.getNumericCellValue();
                        Date date = DateUtil.getJavaDate(value);
                        cellValue = sdf.format(date);
                    }else if(format == 32) {
                        SimpleDateFormat sdf = new SimpleDateFormat("H时mm分");
                        double value = cell.getNumericCellValue();
                        Date date = DateUtil.getJavaDate(value);
                        cellValue = sdf.format(date);
                    }else if (format == 21){
                        Date date = cell.getDateCellValue();
                        cellValue = DateFormatUtils.format(date, "HH:mm:ss");
                    }else if (format == 22){
                        Date date = cell.getDateCellValue();
                        cellValue = DateFormatUtils.format(date, "yyyy-MM-dd HH:mm:ss");
                    } else if (cell.getCellStyle().getDataFormat() == 0) {//处理数值格式
                        cell.setCellType(CellType.STRING);
                        cellValue = String.valueOf(cell.getRichStringCellValue().getString());
                    }else if (cell.toString().indexOf("%") != -1) {
                        // 判断是否是百分数类型
                        // cellValue = cell.getNumericCellValue() * 100 + "%";
                        cellValue = cell.getNumericCellValue() * 100 + "";
                    } else {
                        cellValue = cell.toString();
                    }
                    break;
                case STRING: // 字符串
                    cellValue = String.valueOf(cell.getStringCellValue());
                    break;
                case BOOLEAN: // Boolean
                    cellValue = String.valueOf(cell.getBooleanCellValue());
                    break;
                case FORMULA: // 公式
                    cellValue = String.valueOf(cell.getCellFormula());
                    break;
                case BLANK: // 空值
                    cellValue = null;
                    break;
                case ERROR: // 故障
                    cellValue = "非法字符";
                    break;
                default:
                    cellValue = "未知类型";
                    break;
            }
            if (StringUtils.isNotEmpty(cellValue)){
                return cellValue.trim();
            }
            return cellValue;
        }
    

    POI操作excel的API在这里就不介绍了,只是单纯记录一下获取excel表格数据类型问题

    相关文章

      网友评论

          本文标题:POI获取EXCEL时间格式数据

          本文链接:https://www.haomeiwen.com/subject/jdkjultx.html