> Java > java지도 시간 > 본문

Java easyExcel에서 다중 레벨 헤더를 가져오는 방법

WBOY
풀어 주다: 2023-05-07 13:18:12
앞으로
3421명이 탐색했습니다.

먼저 이해해야 합니다.

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에서 수신한 맵의 키가 정수 유형임을 알 수 있습니다. 공교롭게도 데이터 목록에도 맵이 포함되어 있습니다. 정수형이어야 하는데 이때 논리에 능숙한 학생들은 이 정수가 무작위로 쓰여지고 정렬되는 것이 아니라 테이블 헤더의 위치가 데이터를 반영한다고 생각했을 것입니다. 그렇다면 지금은 다단계 헤더의 시작 위치만 찾으면 됩니다. 아래 그림을 게시하고 답변해 드리겠습니다.

Java easyExcel에서 다중 레벨 헤더를 가져오는 방법

이제 결과가 다중 레벨 헤더로 병합된 것을 확인하세요. 이때 우리가 얻은 헤더 세트의 1은 이름에 해당하고, 2는 전화번호에 해당하고, 3은 데이터 목록에 해당합니다. 획득한 코드는 list.get(0)입니다. 이때 획득한 데이터는 보조 헤더의 데이터입니다. 이때 해당 관계는 1=null 2=null 3=English 4=중국어입니다. 이때 누군가 나에게 다시 물었다. 나중에 다단계 헤더가 생기면 어떻게 되나요? 스티커.

Java easyExcel에서 다중 레벨 헤더를 가져오는 방법

이때 우리가 얻은 헤더 데이터에는 1=이름 2=전화번호 3=점수 4=null 5=평가 결과에서 얻은 목록 데이터에는 1=null 2=null 3=영어 4=중국어 5 =영어 6=중국어
다중 헤더 가져오기가 끝났습니다. 아직도 데이터베이스에 저장하는 방법을 모르시는 분들이 계시기 때문에 가장 어리석은 방법은 기억해두시는 것입니다. 이 범주에서는 이 방법을 사용하지 않으며 유연성이 없습니다. 가장 좋은 방법은 열거형을 사용하여 텍스트를 일치시킨 다음 필드를 일치시키고 엔터티 클래스를 채우거나 텍스트를 필드와 일치시키고 엔터티 클래스를 자동으로 변환하는 메서드를 작성하는 것입니다.

위 내용은 Java easyExcel에서 다중 레벨 헤더를 가져오는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿