• 关于优化,及项目中遇到的问题-02


    excel如果是常规格式,系统则会根据单元格中的内容,自动判断数据类型。

    例如单元格里的内容是“2011-10-17”,Excel会自动将其识别为日期类型。如果是文本格式,Excel只会将其作为字符串来处理。

    所以在导入时,获取Cell 应该有3种模式(日期格式,数字格式,文本格式);

    1.excel中的格式

    文本格式:为String,

    数字格式:有千位符的要替换 ‘,’ 数字类型也可以转化为String。

    日期格式:比较特殊,Cell种所获取的为NUMNIC类型,

    需要先判断为NUMNIC ,再判断是否为日期类型,代码如下

                                if(Cell.CELL_TYPE_NUMERIC == Obj.getCellType()) {
                                    //日期类型
                                    if(org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(Obj)) {
                                        map.put("params"+k, convertCellToString(Obj));
                                    }else {
                                        if(StringHelper.IsEmptyOrNull(getValue(Obj))) {
                                            continue;
                                        }else {
                                            Obj.setCellType(Cell.CELL_TYPE_STRING);//转String类型
                                            map.put("params"+k, getValue(Obj));
                                        }
                                    }
                                }else {
                                    Obj.setCellType(Cell.CELL_TYPE_STRING);
                                    map.put("params"+k, getValue(Obj));
                                    if(StringHelper.IsEmptyOrNull(getValue(Obj))) {
                                        continue;
                                    }
                                }

    上面的Obj 为Cell 对象(row中取的 cell).

    convertCellToString方法需要 获取 Cell 中的Date类型从而转化为String 类型,
    获取Cell中的Date的方法为cell.getDateCellValue(),通过SimpleDateFormat 转化格式 ('yyyy-MM-dd'),
    如果Cell为空会报异常,需要给空字符串,如下:
              public static String convertCellToString(Cell cell){
                  //如果为null会抛出异常,应当返回空字符串
                  if (cell == null)
                     return "";
         
                 //POI对单元格日期处理很弱,没有针对的类型,日期类型取出来的也是一个double值,所以同样作为数值类型
                //解决日期2006/11/02格式读入后出错的问题,POI读取后变成“02-十一月-2006”格式
             if(cell.toString().contains("-") && DateUtil.isCellDateFormatted(cell)){ String ans = ""; try { ans = new SimpleDateFormat("yyyy-MM-dd").format(cell.getDateCellValue()); } catch (Exception e) { ans = cell.toString(); } return ans; } cell.setCellType(Cell.CELL_TYPE_STRING); return cell.getStringCellValue(); }
     
    自古英雄出炼狱,从来富贵入凡尘。
  • 相关阅读:
    mysql常用操作语句
    开启端口命令
    在linux终端远程登陆linux服务器
    CentOS个人目录下中文路径转英文路径
    安装MariaDB和简单配置
    centos 7.1 apache 源码编译安装
    PHP页面跳转
    一亿个不重复的随机数算法
    HTML中添加背景
    SQL语法
  • 原文地址:https://www.cnblogs.com/yunliu0603/p/10869727.html
Copyright © 2020-2023  润新知