easyExcel이 테이블 헤더를 가져와 말도 안되는 코드를 직접 붙여넣는 방법
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import lombok.Data; import java.util.*; @Data public class AnalysisEventMonitor extends AnalysisEventListener<Map<Integer, String>> { /** * 存储Key */ Map<Integer, String> key = new HashMap<>(); /** * keuList */ List<String> keyList=new ArrayList<>(); public AnalysisEventMonitor() { } /** * 重写invokeHeadMap方法,获去表头,如果有需要获取第一行表头就重写这个方法,不需要则不需要重写 * * @param headMap Excel每行解析的数据为Map<Integer, String>类型,Integer是Excel的列索引,String为Excel的单元格值 * @param context context能获取一些东西,比如context.readRowHolder().getRowIndex()为Excel的行索引,表头的行索引为0,0之后的都解析成数据 */ @Override public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) { Set<Integer> integerSet = headMap.keySet(); for (Integer integer : integerSet) { keyList.add(headMap.get(integer)); } key.putAll(headMap); } @Override public void doAfterAllAnalysed(AnalysisContext context) { } @Override public void invoke(Map<Integer, String> integerStringMap, AnalysisContext analysisContext) { } }
이 코드는 easyExcel이 Excel 테이블을 읽을 때 테이블 헤더를 가로채는 데 사용됩니다.
클래스를 직접 만들고 AnalysisEventListener를 상속받아 다시 작성합니다. InvokeHeadMap 메소드는 Excel의 첫 번째 레벨 헤더를 얻을 수 있습니다.
//加载拦截器 作用于 获取表头 AnalysisEventMonitor analysisEventMonitor = new AnalysisEventMonitor (); //读取导入的excel 这个地方容易报错 0✖什么的 这个时候就去把excel的文件用高级版本的excel重新导出 因为版本过低的问题 List<Map<Integer,Object>> list = EasyExcel.read(file.getInputStream(),analysisEventMonitor ).sheet(0).doReadSync(); //获取拦截器拦截到的 表头的Map集合 Map<Integer, String> key = analysisEventMonitor .getKey();
이제 데이터와 헤더가 생겼습니다. 어떤 사람들은 첫 번째 수준 헤더만 가지고 있는데 두 번째 수준 헤더는 어떻게 되는지 궁금할 것입니다. 걱정하지 마세요. 천천히 들어보세요.
위의 코드 블록에서 두 번째 줄은 Excel 데이터를 가져옵니다. 이 데이터는 1단계 헤더를 제거한 후의 데이터입니다. 어떤 사람들은 이것을 이해할 수도 있지만, 여전히 이해하지 못하는 사람들도 있습니다. 코드의 세 번째 줄은 인터셉터가 가로채는 테이블 헤더 모음입니다. map에서 수신한 맵의 키가 정수 유형임을 알 수 있습니다. 공교롭게도 데이터 목록에도 맵이 포함되어 있습니다. 정수형이어야 하는데 이때 논리에 능숙한 학생들은 이 정수가 무작위로 쓰여지고 정렬되는 것이 아니라 테이블 헤더의 위치가 데이터를 반영한다고 생각했을 것입니다. 그렇다면 지금은 다단계 헤더의 시작 위치만 찾으면 됩니다. 아래 그림을 게시하고 답변해 드리겠습니다.
이제 결과가 다중 레벨 헤더로 병합된 것을 확인하세요. 이때 우리가 얻은 헤더 세트의 1은 이름에 해당하고, 2는 전화번호에 해당하고, 3은 데이터 목록에 해당합니다. 획득한 코드는 list.get(0)입니다. 이때 획득한 데이터는 보조 헤더의 데이터입니다. 이때 해당 관계는 1=null 2=null 3=English 4=중국어입니다. 이때 누군가 나에게 다시 물었다. 나중에 다단계 헤더가 생기면 어떻게 되나요? 스티커.
이때 우리가 얻은 헤더 데이터에는 1=이름 2=전화번호 3=점수 4=null 5=평가 결과에서 얻은 목록 데이터에는 1=null 2=null 3=영어 4=중국어 5 =영어 6=중국어
다중 헤더 가져오기가 끝났습니다. 아직도 데이터베이스에 저장하는 방법을 모르시는 분들이 계시기 때문에 가장 어리석은 방법은 기억해두시는 것입니다. 이 범주에서는 이 방법을 사용하지 않으며 유연성이 없습니다. 가장 좋은 방법은 열거형을 사용하여 텍스트를 일치시킨 다음 필드를 일치시키고 엔터티 클래스를 채우거나 텍스트를 필드와 일치시키고 엔터티 클래스를 자동으로 변환하는 메서드를 작성하는 것입니다.
위 내용은 Java easyExcel에서 다중 레벨 헤더를 가져오는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!