Browse Source

feat(ExcelRuntimeException):批量返回行的数据转换异常

pull/3738/head
Jasonyou 1 year ago
parent
commit
0de1f71113
  1. 43
      easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java

43
easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java

@ -12,6 +12,7 @@ import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.enums.HeadKindEnum;
import com.alibaba.excel.enums.ReadDefaultReturnEnum;
import com.alibaba.excel.exception.ExcelDataConvertException;
import com.alibaba.excel.exception.ExcelDataConvertGroupException;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.metadata.data.DataFormatData;
import com.alibaba.excel.metadata.data.ReadCellData;
@ -25,6 +26,7 @@ import com.alibaba.excel.util.DateUtils;
import com.alibaba.excel.util.MapUtils;
import com.alibaba.excel.util.StringUtils;
import org.apache.commons.math3.exception.util.ExceptionContext;
import org.springframework.cglib.beans.BeanMap;
/**
@ -49,6 +51,8 @@ public class ModelBuildEventListener implements IgnoreExceptionReadListener<Map<
AnalysisContext context) {
int index = 0;
Map<Integer, Object> map = MapUtils.newLinkedHashMapWithExpectedSize(cellDataMap.size());
Integer rowIndex = context.readRowHolder().getRowIndex();
ExcelDataConvertGroupException groupException = new ExcelDataConvertGroupException(rowIndex);
for (Map.Entry<Integer, ReadCellData<?>> entry : cellDataMap.entrySet()) {
Integer key = entry.getKey();
ReadCellData<?> cellData = entry.getValue();
@ -60,10 +64,14 @@ public class ModelBuildEventListener implements IgnoreExceptionReadListener<Map<
ReadDefaultReturnEnum readDefaultReturn = context.readWorkbookHolder().getReadDefaultReturn();
if (readDefaultReturn == ReadDefaultReturnEnum.STRING) {
// string
map.put(key,
(String)ConverterUtils.convertToJavaObject(cellData, null, null, readSheetHolder.converterMap(),
context, context.readRowHolder().getRowIndex(), key));
try {
// string
map.put(key,
(String)ConverterUtils.convertToJavaObject(cellData, null, null, readSheetHolder.converterMap(),
context, context.readRowHolder().getRowIndex(), key));
} catch (ExcelDataConvertException e) {
groupException.addException(e);
}
} else {
// retrun ReadCellData
ReadCellData<?> convertedReadCellData = convertReadCellData(cellData,
@ -75,6 +83,9 @@ public class ModelBuildEventListener implements IgnoreExceptionReadListener<Map<
}
}
}
if(!groupException.getGroup().isEmpty()){
throw groupException;
}
// fix https://github.com/alibaba/easyexcel/issues/2014
int headSize = calculateHeadSize(readSheetHolder);
while (index < headSize) {
@ -139,6 +150,8 @@ public class ModelBuildEventListener implements IgnoreExceptionReadListener<Map<
}
Map<Integer, Head> headMap = excelReadHeadProperty.getHeadMap();
BeanMap dataMap = BeanMapUtils.create(resultModel);
Integer rowIndex = context.readRowHolder().getRowIndex();
ExcelDataConvertGroupException groupException = new ExcelDataConvertGroupException(rowIndex );
for (Map.Entry<Integer, Head> entry : headMap.entrySet()) {
Integer index = entry.getKey();
Head head = entry.getValue();
@ -146,15 +159,23 @@ public class ModelBuildEventListener implements IgnoreExceptionReadListener<Map<
if (!cellDataMap.containsKey(index)) {
continue;
}
ReadCellData<?> cellData = cellDataMap.get(index);
Object value = ConverterUtils.convertToJavaObject(cellData, head.getField(),
ClassUtils.declaredExcelContentProperty(dataMap, readSheetHolder.excelReadHeadProperty().getHeadClazz(),
fieldName, readSheetHolder), readSheetHolder.converterMap(), context,
context.readRowHolder().getRowIndex(), index);
if (value != null) {
dataMap.put(fieldName, value);
try {
ReadCellData<?> cellData = cellDataMap.get(index);
Object value = ConverterUtils.convertToJavaObject(cellData, head.getField(),
ClassUtils.declaredExcelContentProperty(dataMap, readSheetHolder.excelReadHeadProperty().getHeadClazz(),
fieldName, readSheetHolder), readSheetHolder.converterMap(), context,
context.readRowHolder().getRowIndex(), index);
if (value != null) {
dataMap.put(fieldName, value);
}
}catch (ExcelDataConvertException e){
groupException.addException(e);
}
}
if(!groupException.getGroup().isEmpty()){
throw groupException;
}
return resultModel;
}

Loading…
Cancel
Save