ExcelAnnoParser.java
1.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package com.taover.bazhuayun.analysis.common.exceldeal;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;
public class ExcelAnnoParser<D> implements ExcelParser<D>{
public static final String FIELD_NAME_ORIGIN_DATA = "originData";
@Override
public List<D> parse(List<List<Object>> fieldData, Class<D> beanClass) throws Exception {
//读取文件
if(fieldData.isEmpty()) {
return new ArrayList<D>();
}
//表头解析
ExcelHeaderParser headerParser = new ExcelHeaderAnnoParser();
ExcelHeaderResult headerParserResult = headerParser.parse(fieldData.get(0), beanClass);
//数据注入
Constructor<D> cons = beanClass.getDeclaredConstructor();
cons.setAccessible(true);
List<D> data = new ArrayList<D>(fieldData.size());
for(int i=1; i<fieldData.size(); ++i) {
D item = cons.newInstance();
for(Entry<Field, Integer> reflect : headerParserResult.getHeaderNameMap().entrySet()) {
Field field = reflect.getKey();
Integer dataIndex = reflect.getValue();
if(field == null || dataIndex == null || dataIndex >= fieldData.size()) {
continue;
}
field.set(item, fieldData.get(i).get(dataIndex));
}
for(Field reflect: headerParserResult.getOriginDataFieldList()) {
reflect.set(item, fieldData.get(i));
}
data.add(item);
}
return data;
}
}