zoukankan      html  css  js  c++  java
  • 通过反射机制,把workbook内容生成list集合

    /**
         * 读取workbook数据,根据title找到实体类对应属性,并通过反射处理,生成有数据的实体类最终封装成list集合(wb传换成list集合)
         *  适用场景:excel 第一行为标题,第二行开始是数据那种
         * @throws Exception
         */
        public void importExcelHandle(Workbook wb) throws Exception {
    
            SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Sheet sheet = wb.getSheetAt(0);
    
            // 获得总列数
            int coloumNum = sheet.getRow(0).getPhysicalNumberOfCells();
    // 获得总行数
    int rowNum = sheet.getLastRowNum(); Class<?> cls = Class.forName("com.ytd.zjdlbb.model.zjdlbb.Zjdlbb"); Method[] ms = cls.getMethods(); List<Zjdlbb> list = new ArrayList<Zjdlbb>(); Map<String, String> keyMap = this.getKey(); // 遍历每行数据,第一行0是标题 for (int i = 1; i <= rowNum; i++) { Object o = cls.newInstance(); // 遍历每一列 for (int j = 0; j < coloumNum; j++) { // 获取列标题 String title = sheet.getRow(0).getCell(j).getStringCellValue(); // log.info("title ============================="+title); // 获取列的值 String colVal = sheet.getRow(i).getCell(j).getStringCellValue(); // 查找对应实体类属性 String key = keyMap.get(title); // log.info("key ============================="+key); if (StringUtil.isNotEmpty(key)) { // 遍历类的所有方法名 for (int k = 0; k < ms.length; k++) { // 获取get方法 String tmp = "get" + StringUtil.makeFirstLetterUpperCase(key); // excel标题与类属性相同的时候 if (tmp.equals(ms[k].getName()) && StringUtil.isNotEmpty(colVal)) { String setType = ms[k].getReturnType().getName(); Method method = null; if ("boolean".equals(setType)) { method = cls.getMethod("set" + StringUtil.makeFirstLetterUpperCase(key), Boolean.class); method.invoke(o, colVal); } else if ("java.lang.String".equals(setType)) { method = cls.getMethod("set" + StringUtil.makeFirstLetterUpperCase(key), String.class); method.invoke(o, colVal); } else if ("java.lang.Long".equals(setType)) { method = cls.getMethod("set" + StringUtil.makeFirstLetterUpperCase(key), Long.class); method.invoke(o, Long.parseLong(colVal)); } else if ("int".equals(setType)) { method = cls.getMethod("set" + StringUtil.makeFirstLetterUpperCase(key), Integer.class); method.invoke(o, Integer.parseInt(colVal)); } else if ("java.util.Date".equals(setType)) { method = cls.getMethod("set" + StringUtil.makeFirstLetterUpperCase(key), Date.class); method.invoke(o, sdfTime.parse(colVal)); } else if ("java.lang.Double".equals(setType)) { method = cls.getMethod("set" + StringUtil.makeFirstLetterUpperCase(key), Double.class); method.invoke(o, Double.parseDouble(colVal)); } else if ("java.lang.Float".equals(setType)) { method = cls.getMethod("set" + StringUtil.makeFirstLetterUpperCase(key), Float.class); method.invoke(o, Float.parseFloat(colVal)); } } } } } list.add((Zjdlbb) o); } this.importExcelHandleIsExist(list); } /** * 集合实体类,按照业务操作(插入库操作) * * @throws Exception */ public void importExcelHandleIsExist(List<Zjdlbb> list) throws Exception { SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Map<String, String> map = new HashMap<String, String>(); for (Zjdlbb entity : list) { map.clear(); map.put("bdz", entity.getBdzmc()); map.put("cld", entity.getCldmc()); map.put("cldlx", entity.getCldlx()); map.put("sjsj", sdfTime.format(entity.getSjsj())); Zjdlbb old = this.getByFourContition(map); if (old != null) { this.delById(old.getId()); } Long id = UniqueIdUtil.genId(); entity.setId(id); this.add(entity); } }
    /**
         * 封装excel标题和对应实体类的属性到map集合
         */
        public Map<String, String> getKey() {
            Map<String, String> map = new HashMap<String, String>();
            map.put("采集时间", "cjsj");
            map.put("用户编号", "yhbh");return map;
        }
  • 相关阅读:
    交叉编译环境软件搭建
    (C)struct结构体
    (C)字节对齐#pragma pack()
    常用bluetooth协议
    (C/C++)register关键字
    Android学习
    (C)*p++和*++p区别
    java文件末尾追加内容的两种方式
    java1.7集合源码阅读: Stack
    java1.7集合源码阅读: Vector
  • 原文地址:https://www.cnblogs.com/rdchen/p/10789230.html
Copyright © 2011-2022 走看看