3
不符合的表头,直接返回错误,不执行导入
不符合的表头,直接返回错误,不执行导入
AnalysisEventListener有个invokeHeadMap函数可以读取表头数据。 我个人的方法是创建一个数组用来存表头,然后再建个boolean数组判断重复和表头字段对应的数组长度。如果重复或者少表头字段的直接return跳出。
参照楼上 必须自己写个监听器。且已经开始读取文件了。
我是这样处理的,不过easyexcel会包装成ExcelAnalysisException异常抛出,需要自己再通过cause处理一遍
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
//获取bo对象head名称
List<String> expectHeadList = Optional.ofNullable(context)
.map(AnalysisContext::currentReadHolder)
.map(ReadHolder::excelReadHeadProperty)
.map(ExcelReadHeadProperty::getHeadMap)
.map(Map::values)
.orElse(Collections.emptyList())
.stream().map(Head::getHeadNameList)
.flatMap(Collection::stream)
.collect(Collectors.toList());
//表头数量检测
if (!Objects.equals(headMap.size(), expectHeadList.size())) {
throw new CustomerExp("settlement.template.error");
}
//表头名称检测
for (int i = 0; i < headMap.size(); i++) {
if (!Objects.equals(headMap.get(i), expectHeadList.get(i))) {
throw new CustomerExp("settlement.template.error");
}
}
}