|
|
|
@ -13,6 +13,7 @@ import com.alibaba.excel.enums.HeadKindEnum;
|
|
|
|
|
import com.alibaba.excel.event.AbstractIgnoreExceptionReadListener; |
|
|
|
|
import com.alibaba.excel.exception.ExcelDataConvertException; |
|
|
|
|
import com.alibaba.excel.metadata.CellData; |
|
|
|
|
import com.alibaba.excel.metadata.GlobalConfiguration; |
|
|
|
|
import com.alibaba.excel.metadata.Head; |
|
|
|
|
import com.alibaba.excel.metadata.property.ExcelContentProperty; |
|
|
|
|
import com.alibaba.excel.read.metadata.holder.ReadHolder; |
|
|
|
@ -22,7 +23,7 @@ import net.sf.cglib.beans.BeanMap;
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Convert to the object the user needs |
|
|
|
|
* |
|
|
|
|
* |
|
|
|
|
* @author jipengfei |
|
|
|
|
*/ |
|
|
|
|
public class ModelBuildEventListener extends AbstractIgnoreExceptionReadListener<List<CellData>> { |
|
|
|
@ -40,7 +41,8 @@ public class ModelBuildEventListener extends AbstractIgnoreExceptionReadListener
|
|
|
|
|
private Object buildStringList(List<CellData> data, ReadHolder currentReadHolder) { |
|
|
|
|
List<String> list = new ArrayList<String>(); |
|
|
|
|
for (CellData cellData : data) { |
|
|
|
|
list.add((String)convertValue(cellData, String.class, null, currentReadHolder.converterMap())); |
|
|
|
|
list.add((String)convertValue(cellData, String.class, null, currentReadHolder.converterMap(), |
|
|
|
|
currentReadHolder.globalConfiguration())); |
|
|
|
|
} |
|
|
|
|
return list; |
|
|
|
|
} |
|
|
|
@ -54,8 +56,8 @@ public class ModelBuildEventListener extends AbstractIgnoreExceptionReadListener
|
|
|
|
|
throw new ExcelDataConvertException( |
|
|
|
|
"Can not instance class: " + excelReadHeadProperty.getHeadClazz().getName(), e); |
|
|
|
|
} |
|
|
|
|
Map<String, Object> map = new HashMap<String, Object>(); |
|
|
|
|
Map<Integer, Head> headMap = excelReadHeadProperty.getHeadMap(); |
|
|
|
|
Map<String, Object> map = new HashMap<String, Object>(headMap.size() * 4 / 3 + 1); |
|
|
|
|
Map<Integer, ExcelContentProperty> contentPropertyMap = excelReadHeadProperty.getContentPropertyMap(); |
|
|
|
|
for (Map.Entry<Integer, Head> entry : headMap.entrySet()) { |
|
|
|
|
Integer index = entry.getKey(); |
|
|
|
@ -68,7 +70,7 @@ public class ModelBuildEventListener extends AbstractIgnoreExceptionReadListener
|
|
|
|
|
} |
|
|
|
|
ExcelContentProperty excelContentProperty = contentPropertyMap.get(index); |
|
|
|
|
Object value = convertValue(cellData, excelContentProperty.getField().getType(), excelContentProperty, |
|
|
|
|
currentReadHolder.converterMap()); |
|
|
|
|
currentReadHolder.converterMap(), currentReadHolder.globalConfiguration()); |
|
|
|
|
if (value != null) { |
|
|
|
|
map.put(excelContentProperty.getField().getName(), value); |
|
|
|
|
} |
|
|
|
@ -78,14 +80,20 @@ public class ModelBuildEventListener extends AbstractIgnoreExceptionReadListener
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Object convertValue(CellData cellData, Class clazz, ExcelContentProperty contentProperty, |
|
|
|
|
Map<String, Converter> converterMap) { |
|
|
|
|
Converter converter = converterMap.get(ConverterKeyBuild.buildKey(clazz, cellData.getType())); |
|
|
|
|
Map<String, Converter> converterMap, GlobalConfiguration globalConfiguration) { |
|
|
|
|
Converter converter = null; |
|
|
|
|
if (contentProperty != null) { |
|
|
|
|
converter = contentProperty.getConverter(); |
|
|
|
|
} |
|
|
|
|
if (converter == null) { |
|
|
|
|
converter = converterMap.get(ConverterKeyBuild.buildKey(clazz, cellData.getType())); |
|
|
|
|
} |
|
|
|
|
if (converter == null) { |
|
|
|
|
throw new ExcelDataConvertException( |
|
|
|
|
"Converter not found, convert " + cellData.getType() + " to " + clazz.getName()); |
|
|
|
|
} |
|
|
|
|
try { |
|
|
|
|
return converter.convertToJavaData(cellData, contentProperty); |
|
|
|
|
return converter.convertToJavaData(cellData, contentProperty, globalConfiguration); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
throw new ExcelDataConvertException("Convert data " + cellData + " to " + clazz + " error ", e); |
|
|
|
|
} |
|
|
|
|