说明
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,该数据值不符合要求,请检验后重新导入!