zoukankan      html  css  js  c++  java
  • poi处理excel自定义日期格式

    poi读取excel自定义时间类型时,读取到的是CELL_TYPE_NUMERIC,即数值类型,
    这个时候如果直接取值的话会发现取到的值和表格中的值不一样,
    这时应该先判断值是否是时间或者日期类型再进行处理,
    代码如下:
    private String parseExcel(Cell cell) {
    String result = new String();
    switch (cell.getCellType()) {
    case HSSFCell.CELL_TYPE_NUMERIC:// 数字类型
    if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
    SimpleDateFormat sdf = null;
    if (cell.getCellStyle().getDataFormat() == HSSFDataFormat
    .getBuiltinFormat("h:mm")) {
    sdf = new SimpleDateFormat("HH:mm");
    } else {// 日期
    sdf = new SimpleDateFormat("yyyy-MM-dd");
    }
    Date date = cell.getDateCellValue();
    result = sdf.format(date);
    } else if (cell.getCellStyle().getDataFormat() == 58) {
    // 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    double value = cell.getNumericCellValue();
    Date date = org.apache.poi.ss.usermodel.DateUtil
    .getJavaDate(value);
    result = sdf.format(date);
    } else {
    double value = cell.getNumericCellValue();
    CellStyle style = cell.getCellStyle();
    DecimalFormat format = new DecimalFormat();
    String temp = style.getDataFormatString();
    // 单元格设置成常规
    if (temp.equals("General")) {
    format.applyPattern("#");
    }
    result = format.format(value);
    }
    break;
    case HSSFCell.CELL_TYPE_STRING:// String类型
    result = cell.getRichStringCellValue().toString();
    break;
    case HSSFCell.CELL_TYPE_BLANK:
    result = "";
    default:
    result = "";
    break;
    }
    return result;
    }


    Excel数据处理:

    Excel存储日期、时间均以数值类型进行存储,读取时POI先判断是是否是数值类型,再进行判断转化

    1、数值格式(CELL_TYPE_NUMERIC):

    1.纯数值格式:getNumericCellValue() 直接获取数据

    2.日期格式:处理yyyy-MM-dd, d/m/yyyy h:mm, HH:mm 等不含文字的日期格式

    1).判断是否是日期格式:HSSFDateUtil.isCellDateFormatted(cell)

    2).判断是日期或者时间

    cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")

    OR: cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("yyyy-MM-dd")

    3.自定义日期格式:处理yyyy年m月d日,h时mm分,yyyy年m月等含文字的日期格式

    判断cell.getCellStyle().getDataFormat()值,解析数值格式

    yyyy年m月d日----->31

    m月d日---->58

    h时mm分--->32


    *万能处理方案:

    所有日期格式都可以通过getDataFormat()值来判断

    yyyy-MM-dd----- 14

    yyyy年m月d日--- 31

    yyyy年m月------- 57

    m月d日 ---------- 58

    HH:mm----------- 20

    h时mm分 ------- 32


    //1、判断是否是数值格式
    if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
    short format = cell.getCellStyle().getDataFormat();
    SimpleDateFormat sdf = null;
    if(format == 14 || format == 31 || format == 57 || format == 58){
    //日期
    sdf = new SimpleDateFormat("yyyy-MM-dd");
    }else if (format == 20 || format == 32) {
    //时间
    sdf = new SimpleDateFormat("HH:mm");
    }
    double value = cell.getNumericCellValue();
    Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value);
    result = sdf.format(date);
    }

    引自
    https://www.cnblogs.com/azhqiang/p/4260596.html
    这哥们写得好,我在网上搜到他写的这篇文,然后自己复制了一下记下来了

  • 相关阅读:
    Xcode And iOS9新特性
    AutoLayout
    本地化
    Map
    iOS多线程编程
    第三方抽屉效果
    iPad编程
    CoreData / MagicalRecord
    js清除单选框所选的值
    js获取背景颜色
  • 原文地址:https://www.cnblogs.com/xkjy/p/11088404.html
Copyright © 2011-2022 走看看