EasyExcelは指定された位置からデータを読み取ります

以前、easyExcelに従来のpoiの代わりに少し触れました。前回使用したときは、ヘッダーはより伝統的で複雑ではありませんでしたが、今回はヘッダーが少し複雑になっています。データの読み取りは次の場所から開始する必要があります。指定された位置。easyExcelは指定された場所から読み取られたため、絶え間ない調査の結果、適切なソリューションが見つかりました。

ビッグガイ、遠回りしてください。このレコードは主に次回のあなたの便宜のためです。

1.次の図に示すように、最初にヘッダーを確認します。行1〜5はヘッダーです。

データの読み取りを開始するには、6行目が実際のデータです。コードに直接移動して赤いアイコンを確認します。HeadRowNumber()が書き込まれていない場合、デフォルトは1です。これは、データが2行目から読み取られることを意味します。 。

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.)データ分析を1つずつ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