说明 easyExcel 可谓是java使用导入导出一个非常好用的工具, 但是我们在使用excel导入excel也会遇到一些异常信息,今天水一篇帖子就是在我们导入excel数据是,其中有一些数据是不合规的,easyExcel就会去抛出异常信息,并且停止导入,这样一样我们就不知道我们上次导入的位置是哪里,我们需要把错误信息记录下来,然后做反馈给用户,告知用户哪行哪列的数据有问题,需要处理好格式再重新导入
异常信息 1 2 3 4 5 com.alibaba.excel.exception.ExcelAnalysisException: com.alibaba.excel.exception.ExcelDataConvertException: Convert data -2789 to class java .lang.String error at com.alibaba.excel.analysis.v07.XlsxSaxAnalyser.parseXmlSource(XlsxSaxAnalyser.java:183 ) at com.alibaba.excel.analysis.v07.XlsxSaxAnalyser.execute(XlsxSaxAnalyser.java:201 ) at com.alibaba.excel.analysis.ExcelAnalyserImpl.analysis(ExcelAnalyserImpl.java:115 ) ...
解决方法 原因 首先错误信息中的这个异常类ExcelDataConvertException,对异常的地方进行断点跟踪,发现信息如下, 然后再到ExcelDataConvertException 看源码部分如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class ExcelDataConvertException extends RuntimeException { private Integer rowIndex; private Integer columnIndex; private CellData cellData;
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 public class CellData <T> extends AbstractCell { private CellDataTypeEnum type; private BigDecimal numberValue; private String stringValue; private Boolean booleanValue; private Boolean formula; private String formulaValue; private byte [] imageValue; private Integer dataFormat; private String dataFormatString;
代码 于是我们就可以从异常信息中获取我们需要的信息了 代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 catch (ExcelAnalysisException e) { e.printStackTrace(); if (e.getCause() instanceof ExcelDataConvertException) { ExcelDataConvertException excelDataConvertException = (ExcelDataConvertException) e.getCause(); String cellMsg = "" ; CellData cellData = excelDataConvertException.getCellData(); CellDataTypeEnum type = cellData.getType(); if (type.equals(CellDataTypeEnum.NUMBER)) { cellMsg = cellData.getNumberValue().toString(); } else if (type.equals(CellDataTypeEnum.STRING)) { cellMsg = cellData.getStringValue(); } else if (type.equals(CellDataTypeEnum.BOOLEAN)) { cellMsg = cellData.getBooleanValue().toString(); } String errorMsg = String.format("excel表格:第%s行,第%s列,数据值为:%s,该数据值不符合要求,请检验后重新导入!<span style=\"color:red\">请检查其他的记录是否有同类型的错误!</span>" , excelDataConvertException.getRowIndex() + 1 , excelDataConvertException.getColumnIndex(), cellMsg); log.error(errorMsg); } }
最终处理结果
导入数据总条数:0 导入数据成功条数:0 导入数据失败条数:0 导入数据用时:2秒 导入数据用时:0.03333333333333333分钟 导入数据完成时间:2020-05-14 17:28:18 错误信息:excel表格:第10496行,第20列,数据值为:-2789,该数据值不符合要求,请检验后重新导入!