zoukankan      html  css  js  c++  java
  • 导入不固定模板Excel处理

      接到一个需求,要将用户从一个系统导出的excel进行导入相关系统,但系统要求导入的excel模板不同,只是用户导入的excel中有部分列符合导入要求。

    首先就是处理用户导入的列是否符合系统模板要求所需要的列。这个首先想到遍历用户给的excel列名称对比系统要求的excel模板所要具有的列(某些列数据可以为空但不能缺少系统模板要求的列)。

      这里操作excel的框架是POI3.12版本看代码:

        

      HSSFRow row2 = sheet.getRow(5);//用户导入的模板第六行是列名称行,将此列所有列名遍历进行比较,不符合系统导入要求模板列提示缺少XX列
      Iterator<Cell> cells = row2.cellIterator();

      

      Cell cell = null;
      StringBuffer stbf = new StringBuffer();
      List<String> list = new ArrayList<String>();

    l  ist.add("xx");

      list.add("xx");
      list.add("xx");
      list.add("xxx");
      // list.add("xxxx");
      list.add("xxxx");  ......//这些是系统excel模板要求具有的列名称

    List<String> list1 = Collections.synchronizedList(new ArrayList<String>(list));//这里以包含所有列名的list复制另一个list用来对比有用户excel中符合要求的列的话移除剩下有元素的话就缺少系统要求的列
      Map<String, String> sort = new HashMap<String, String>();

      while (cells.hasNext()) {
      cell = cells.next();
      int column = cell.getColumnIndex();
      int index = list.indexOf(cell.toString());

      sort.put(String.valueOf(column), String.valueOf(index));
      list1.remove(cell.toString());
      }

      这样就把用户导入的excel按系统所要求列顺序放进list中处理。

      在读取单元格时要注意单元格值和poi中cellType对应的关系方便对某些类型数据处理:

    CellType 类型 值
    CELL_TYPE_NUMERIC 数值型 0
    CELL_TYPE_STRING 字符串型 1
    CELL_TYPE_FORMULA 公式型 2
    CELL_TYPE_BLANK 空值 3
    CELL_TYPE_BOOLEAN 布尔型 4
    CELL_TYPE_ERROR 错误 5

      其中我再判断单元格中类型是否为数值型时遇到误判,因为单元格看起来是数字,但读取但程序中他的类型确实字符串型,是因为excel单元格数据格式设置了文本类型,这时看excel单元格样式如果左上角有三角标志就是文本类型即时值为数字也读取出来是字符串类型,把那个三角样式去掉才行。

     

  • 相关阅读:
    成功的两大法宝:自我管理与积累人脉
    CEO十五条法则 (是基于对CEO更加的关怀)
    百度李彦宏教你创业七大招!非常实用
    商业领袖摘下"帽子"才能炼成极致
    Alter index coalesce VS shrink space
    sort_area_size参数的一些表现
    Difference between parameter COMPATIBLE and OPTIMIZER_FEATURES_ENABLE
    Oracle常用的几个父栓
    Know more about RAC GES STATISTICS
    ORA07445 [SIGBUS] [Object specific hardware error]错误一例
  • 原文地址:https://www.cnblogs.com/luoning/p/11055144.html
Copyright © 2011-2022 走看看