diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java index c3fb3bc9..f4477c38 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java +++ b/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 = MapUtils.newLinkedHashMapWithExpectedSize(cellDataMap.size()); + Integer rowIndex = context.readRowHolder().getRowIndex(); + ExcelDataConvertGroupException groupException = new ExcelDataConvertGroupException(rowIndex); for (Map.Entry> entry : cellDataMap.entrySet()) { Integer key = entry.getKey(); ReadCellData cellData = entry.getValue(); @@ -60,10 +64,14 @@ public class ModelBuildEventListener implements IgnoreExceptionReadListener convertedReadCellData = convertReadCellData(cellData, @@ -75,6 +83,9 @@ public class ModelBuildEventListener implements IgnoreExceptionReadListener headMap = excelReadHeadProperty.getHeadMap(); BeanMap dataMap = BeanMapUtils.create(resultModel); + Integer rowIndex = context.readRowHolder().getRowIndex(); + ExcelDataConvertGroupException groupException = new ExcelDataConvertGroupException(rowIndex ); for (Map.Entry entry : headMap.entrySet()) { Integer index = entry.getKey(); Head head = entry.getValue(); @@ -146,15 +159,23 @@ public class ModelBuildEventListener implements IgnoreExceptionReadListener 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; }