();
for (int i = 0; i < excelFieldNames.length; i++) {
colMap.put(excelFieldNames[i], firstRow.getCell(i).getColumnIndex());
}
// 将sheet转换为list, rowNum从0开始, 总数 = lastNum + 1
int rowCounts = sheet.getLastRowNum() + 1;
for (int i = 3; i < rowCounts; i++) {
// 新建要转换的对象
T entity = entityClass.newInstance();
Row row = sheet.getRow(i);
//避免空行
if(row == null){
continue;
}
// 给对象中的字段赋值
for (Entryentry : fieldMap.entrySet()) {
// 获取英文字段名
String enNormalName = entry.getKey();
// 获取中文字段名
String cnNormalName = entry.getValue();
// 根据中文字段名获取列号
int col = colMap.get(cnNormalName);
String content = null;
// 获取当前单元格中的内容
if(row.getCell(col) != null){
row.getCell(col).setCellType(XSSFCell.CELL_TYPE_STRING);
content = row.getCell(col, Row.CREATE_NULL_AS_BLANK).getStringCellValue();
}
// 给对象赋值
setFieldValueByName(enNormalName, content, entity);
}
resultList.add(entity);
}
}
return resultList;
}
/**
* @MethodName : getFieldByName
* @Description : 根据字段名获取字段
* @param fieldName
* 字段名
* @param clazz
* 包含该字段的类
* @return 字段
*/
private static Field getFieldByName(String fieldName, Class> clazz) {
// 拿到本类的所有字段
Field[] selfFields = clazz.getDeclaredFields();
// 如果本类中存在该字段,则返回
for (Field field : selfFields) {
if (field.getName().equals(fieldName)) {
return field;
}
}
// 否则,查看父类中是否存在此字段,如果有则返回
Class> superClazz = clazz.getSuperclass();
if (superClazz != null && superClazz != Object.class) {
return getFieldByName(fieldName, superClazz);
}
// 如果本类和父类都没有,则返回空
return null;
}
/**
* @MethodName : setFieldValueByName
* @Description : 根据字段名给对象的字段赋值
* @param fieldName
* 字段名
* @param fieldValue
* 字段值
* @param o
* 对象
*/
private static void setFieldValueByName(String fieldName,
Object fieldValue, Object o) throws Exception {
if(fieldValue == null){
return;
}
Field field = getFieldByName(fieldName, o.getClass());
if (field != null) {
field.setAccessible(true);
// 获取字段类型
Class> fieldType = field.getType();
//trim一下防止类型转换时报错
String fieldValueStr = fieldValue.toString().trim();
// 根据字段类型给字段赋值
if (String.class == fieldType) {
field.set(o, fieldValueStr);
} else if ((Integer.TYPE == fieldType)
|| (Integer.class == fieldType)) {
field.set(o, Integer.parseInt(fieldValueStr));
} else if ((Long.TYPE == fieldType) || (Long.class == fieldType)) {
field.set(o, Long.valueOf(fieldValueStr));
} else if ((Float.TYPE == fieldType) || (Float.class == fieldType)) {
field.set(o, Float.valueOf(fieldValueStr));
} else if ((Short.TYPE == fieldType) || (Short.class == fieldType)) {
field.set(o, Short.valueOf(fieldValueStr));
} else if ((Double.TYPE == fieldType)
|| (Double.class == fieldType)) {
field.set(o, Double.valueOf(fieldValueStr));
} else if (Character.TYPE == fieldType) {
if (fieldValue.toString().length() > 0) {
field.set(o, fieldValue.toString().charAt(0));
}
} else if (Date.class == fieldType) {
field.set(o, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.parse(fieldValueStr));
} else {
field.set(o, fieldValue);
}
} else {
throw new Exception(o.getClass().getSimpleName() + "类不存在字段名 "
+ fieldName);
}
}
}