EasyExcel은 지정된 위치에서 데이터를 읽습니다.

이전에 기존의 poi 대신 easyExcel과 접촉 한 적이 있습니다. 지난번에 사용했을 때는 헤더가 더 전통적이고 복잡하지 않았지만 이번에는 헤더가 조금 더 복잡합니다. 데이터 읽기는 다음에서 시작해야합니다. 지정된 위치에서 easyExcel을 읽었으므로 지속적인 탐색을 통해 적절한 솔루션을 찾았습니다.

이 기록은 주로 다음 번에 편의를위한 것입니다.

1. 먼저 아래 그림과 같이 내 헤더를 살펴보십시오. 1 ~ 5 행은 헤더입니다.

데이터 읽기를 시작하려면 6 번째 줄이 실제 데이터입니다. 코드로 직접 이동하여 빨간색 아이콘을 확인합니다. HeadRowNumber ()가 작성되지 않은 경우 기본값은 1이며, 이는 두 번째 줄에서 데이터를 읽음을 의미합니다. .

2. 데이터 가져 오기 프로세스에 대해 이야기하십시오.

1.) 헤더 확인 : invokeHeadMap () 메서드.

/**
	 * @param headMap 传入excel头部(第一行数据)数据的index,name
	 * 					校验excel头部格式,必须完全匹配
	 */
	int x=0;
	@Override
	public void invokeHeadMap(Map<Integer,String> headMap,AnalysisContext context) {
		x++;
		super.invokeHeadMap(headMap, context);
		System.out.println(headMap.size());
		if(x==3 && headMap.size()!=20) {
			teamList.add("解析Excel出错,请传入正确模板的Excel");
		}
	}

2.) 데이터 분석 하나 하나 invoke () 메소드, 메소드는 내 비즈니스 로직 및 데이터 검증을 포함합니다. MedBatchDetailsPerExcel은 각 행의 특정 데이터 값입니다.

/**
	 * 这个每一条数据解析的时候都回来调用
	 */
	List<MedBatchDetailsPer> medBatchDetailsList = new ArrayList<>();//要导入的数据
	List<MedBatchDetailsPer> medBatchDetailsList3=null;
	@Override
	public void invoke(MedBatchDetailsPerExcel data, AnalysisContext context) {
		log.info("解析到一条数据:{}",JSON.toJSONString(data));
		total++;
		Integer rowIndex=context.readRowHolder().getRowIndex()+1;//+1行(实际中excel中第几行的数据)
		MedBatchDetailsPer medBatchDetailsPer=importDataCheck1(data,rowIndex);
		importDataCheck(data,rowIndex);
		List<MedBatchDetailsPer> medBatchDetailsList2 =repeatImportCheck(data,rowIndex);//重复导入校验
		if (medBatchDetailsList2 != null && medBatchDetailsList2.size() > 0) {
			medBatchDetailsList3.addAll(medBatchDetailsList2);
		}
		medBatchDetailsList.add(medBatchDetailsPer);
	}

3.) 모든 데이터를 분석 한 후 doAfterAllAnalysed () 메서드는 데이터를 저장하는 메서드를 가지고 있습니다.

/**
	 * 所有数据解析都完成之后,调用
	 */
	@Override
	public void doAfterAllAnalysed(AnalysisContext context) {
		// 这里也要保存数据,确保最后遗留的数据也存储到数据库
		insertAllData(empId,medBatchDetailsList.size(),medBatchDetailsList,medBatchDetailsList3);
		log.info("所有数据都解析完成!");		
	}

easyExcel 단계는이 단계들에 불과하며, 구체적인 비즈니스 로직이 다르고, 그냥 노크 일뿐입니다 ~~~ 이번에는 주로 복잡한 헤더의 가져 오기 및 읽기를 기록합니다.

 

추천

출처blog.csdn.net/zhangleiyes123/article/details/106670561