|
|
|
@ -268,22 +268,15 @@ public class ExcelUtil<T> |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// 有数据时才处理 得到类的所有field.
|
|
|
|
|
Field[] allFields = clazz.getDeclaredFields(); |
|
|
|
|
// 定义一个map用于存放列的序号和field.
|
|
|
|
|
Map<Integer, Field> fieldsMap = new HashMap<Integer, Field>(); |
|
|
|
|
for (int col = 0; col < allFields.length; col++) |
|
|
|
|
List<Object[]> fields = this.getFields(); |
|
|
|
|
Map<Integer, Object[]> fieldsMap = new HashMap<Integer, Object[]>(); |
|
|
|
|
for (Object[] objects : fields) |
|
|
|
|
{ |
|
|
|
|
Field field = allFields[col]; |
|
|
|
|
Excel attr = field.getAnnotation(Excel.class); |
|
|
|
|
if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) |
|
|
|
|
Excel attr = (Excel) objects[1]; |
|
|
|
|
Integer column = cellMap.get(attr.name()); |
|
|
|
|
if (column != null) |
|
|
|
|
{ |
|
|
|
|
// 设置类的私有字段属性可访问.
|
|
|
|
|
field.setAccessible(true); |
|
|
|
|
Integer column = cellMap.get(attr.name()); |
|
|
|
|
if (column != null) |
|
|
|
|
{ |
|
|
|
|
fieldsMap.put(column, field); |
|
|
|
|
} |
|
|
|
|
fieldsMap.put(column, objects); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
for (int i = titleNum + 1; i <= rows; i++) |
|
|
|
@ -296,14 +289,15 @@ public class ExcelUtil<T> |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
T entity = null; |
|
|
|
|
for (Map.Entry<Integer, Field> entry : fieldsMap.entrySet()) |
|
|
|
|
for (Map.Entry<Integer, Object[]> entry : fieldsMap.entrySet()) |
|
|
|
|
{ |
|
|
|
|
Object val = this.getCellValue(row, entry.getKey()); |
|
|
|
|
|
|
|
|
|
// 如果不存在实例则新建.
|
|
|
|
|
entity = (entity == null ? clazz.newInstance() : entity); |
|
|
|
|
// 从map中得到对应列的field.
|
|
|
|
|
Field field = fieldsMap.get(entry.getKey()); |
|
|
|
|
Field field = (Field) entry.getValue()[0]; |
|
|
|
|
Excel attr = (Excel) entry.getValue()[1]; |
|
|
|
|
// 取得类型,并根据对象类型设置值.
|
|
|
|
|
Class<?> fieldType = field.getType(); |
|
|
|
|
if (String.class == fieldType) |
|
|
|
@ -363,7 +357,6 @@ public class ExcelUtil<T> |
|
|
|
|
} |
|
|
|
|
if (StringUtils.isNotNull(fieldType)) |
|
|
|
|
{ |
|
|
|
|
Excel attr = field.getAnnotation(Excel.class); |
|
|
|
|
String propertyName = field.getName(); |
|
|
|
|
if (StringUtils.isNotEmpty(attr.targetAttr())) |
|
|
|
|
{ |
|
|
|
@ -610,8 +603,6 @@ public class ExcelUtil<T> |
|
|
|
|
{ |
|
|
|
|
Field field = (Field) os[0]; |
|
|
|
|
Excel excel = (Excel) os[1]; |
|
|
|
|
// 设置实体类私有属性可访问
|
|
|
|
|
field.setAccessible(true); |
|
|
|
|
this.addCell(excel, row, vo, field, column++); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -1164,7 +1155,17 @@ public class ExcelUtil<T> |
|
|
|
|
*/ |
|
|
|
|
private void createExcelField() |
|
|
|
|
{ |
|
|
|
|
this.fields = new ArrayList<Object[]>(); |
|
|
|
|
this.fields = getFields(); |
|
|
|
|
this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList()); |
|
|
|
|
this.maxHeight = getRowHeight(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 获取字段注解信息 |
|
|
|
|
*/ |
|
|
|
|
public List<Object[]> getFields() |
|
|
|
|
{ |
|
|
|
|
List<Object[]> fields = new ArrayList<Object[]>(); |
|
|
|
|
List<Field> tempFields = new ArrayList<>(); |
|
|
|
|
tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields())); |
|
|
|
|
tempFields.addAll(Arrays.asList(clazz.getDeclaredFields())); |
|
|
|
@ -1173,7 +1174,12 @@ public class ExcelUtil<T> |
|
|
|
|
// 单注解
|
|
|
|
|
if (field.isAnnotationPresent(Excel.class)) |
|
|
|
|
{ |
|
|
|
|
putToField(field, field.getAnnotation(Excel.class)); |
|
|
|
|
Excel attr = field.getAnnotation(Excel.class); |
|
|
|
|
if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) |
|
|
|
|
{ |
|
|
|
|
field.setAccessible(true); |
|
|
|
|
fields.add(new Object[] { field, attr }); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 多注解
|
|
|
|
@ -1181,14 +1187,17 @@ public class ExcelUtil<T> |
|
|
|
|
{ |
|
|
|
|
Excels attrs = field.getAnnotation(Excels.class); |
|
|
|
|
Excel[] excels = attrs.value(); |
|
|
|
|
for (Excel excel : excels) |
|
|
|
|
for (Excel attr : excels) |
|
|
|
|
{ |
|
|
|
|
putToField(field, excel); |
|
|
|
|
if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) |
|
|
|
|
{ |
|
|
|
|
field.setAccessible(true); |
|
|
|
|
fields.add(new Object[] { field, attr }); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList()); |
|
|
|
|
this.maxHeight = getRowHeight(); |
|
|
|
|
return fields; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -1205,17 +1214,6 @@ public class ExcelUtil<T> |
|
|
|
|
return (short) (maxHeight * 20); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 放到字段集合中 |
|
|
|
|
*/ |
|
|
|
|
private void putToField(Field field, Excel attr) |
|
|
|
|
{ |
|
|
|
|
if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) |
|
|
|
|
{ |
|
|
|
|
this.fields.add(new Object[] { field, attr }); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 创建一个工作簿 |
|
|
|
|
*/ |
|
|
|
|