需求,异步导入excel需要做参数校验。期望能得到所有的错误信息(指的是类型错误,或者时间格式错误。)这一点已经在问题中找到了,listener每一行重写onexception可以得到该列的错误信息。这里有个问题拿不到这行所有不符合格式的字段,有办法重写什么可以去实现吗?
50pmv0ei1#
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.read.metadata.holder.ReadHolder; import com.alibaba.excel.util.StringUtils; import java.util.ArrayList; import java.util.List; public class CustomExcelListener extends AnalysisEventListener<DemoData> { private List<String> errorMessages = new ArrayList<>(); @Override public void invoke(DemoData data, AnalysisContext context) { // 进行参数校验 if (StringUtils.isEmpty(data.getName())) { errorMessages.add("姓名不能为空"); } // 其他参数校验... // 如果有时间格式错误,可以在这里添加相应的校验逻辑 // 如果有类型错误,可以在这里添加相应的校验逻辑 } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 所有数据分析完成后,可以进行额外的处理 } @Override public void onException(Exception exception, AnalysisContext context) { // 异常处理 // 在这里可以获取到当前行的错误信息,并保存起来 // 这里的异常通常是指数据格式错误或类型错误等 ReadHolder readHolder = context.currentReadHolder(); List<CellData> cellDataList = readHolder.getCellDataList(); for (CellData cellData : cellDataList) { errorMessages.add(cellData.toString()); } } // 获取所有错误信息 public List<String> getErrorMessages() { return errorMessages; } }
1条答案
按热度按时间50pmv0ei1#