当前位置 : 主页 > 编程语言 > java >

通过反射机制,把workbook内容生成list集合

来源:互联网 收集:自由互联 发布时间:2022-09-02
/** * 读取workbook数据,根据title找到实体类对应属性,并通过反射处理,生成有数据的实体类最终封装成list集合(wb传换成list集合) * 适用场景:excel 第一行为标题,第二行开始是数据
/**
* 读取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;
}

 

上一篇:下拉框,循环输出option
下一篇:没有了
网友评论