POI获取EXCEL时间格式数据

记录一次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时间格式数据)