通过反射机制,把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;
    }
原文地址:https://www.cnblogs.com/rdchen/p/10789230.html