ExcelAnnoParser.java 1.38 KB
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;
	}
}