背景:
easyexcel v3.1.5
實體類已經使用注解 @ExcelProperty標注需要導入的屬性
正文開始
關閉忽略空行,防止第一行是空跳過校驗 ignoreEmptyRow(false)。此處如果未關閉,第一行為空時,不會進入invokeHeadMap方法
EasyExcel.read(file.getInputStream(), **.class, new KnowledgeListener(kgService, classificationRepository, issuesRepository, syncNeo4j, algorithmService)) .ignoreEmptyRow(false).sheet().doRead();
在自己的 Listener 重寫 invokeHeadMap 方法。headMap為excel的第一行數據映射,expectHeadList為easyExcel從headMap中匹配到的 @ExcelProperty標注過的字段。所有只需要判斷數量是否一致即可,另外還要注意空行時的headMap為空。
@Override public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) { if(CollectionUtils.isEmpty(headMap)){ //throw new CactusException(500, "此處可以根據自己的業務處理"); } //獲取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(CollectionUtils.isEmpty(expectHeadList)){ //throw new CactusException(500, "此處可以根據自己的業務處理"); } //表頭數量檢測 if (!Objects.equals(headMap.size(), expectHeadList.size())) { //throw new CactusException(500, "此處可以根據自己的業務處理"); } }
浙公網安備 33010602011771號