首頁  >  文章  >  Java  >  Java easyExcel的多層表頭怎麼導入

Java easyExcel的多層表頭怎麼導入

WBOY
WBOY轉載
2023-05-07 13:18:123364瀏覽

首先要了解

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的數據這個數據是去掉了一級表頭之後的數據,說到這可能有的人就懂了,有的人還是不懂ok我們繼續說,第三行程式碼是我們攔截器攔截的表頭的集合可以看出來是以map接收的map的key是一個Integer類型,欸巧了,我們的資料list 其中也包了個map而且map的key 剛好也是Integer類型,這時候邏輯性好的同學一定想到了,這個integer 可不是瞎寫瞎排序的而是表頭的位置與資料遙相呼應的。那這個時候就簡單了,我們只需要找到多級表頭的開始位置 即可 下面我會貼圖 然後再做解答。

Java easyExcel的多層表頭怎麼導入

看到現在成績是合併了的多層表頭,這時候我們獲取到的表頭集合中的1對應姓名2對應電話3對應成績我們獲取到的資料list,程式碼寫list.get(0); 這個取得到的資料就是二級表頭中的資料這個時候又是拿到了一個map 對應關係分別是1=null 2=null 3=英文4=語文。這時候又有人說了 如果我後面再多一個多層錶頭怎麼辦?貼圖。

Java easyExcel的多層表頭怎麼導入

這時候我們取得到的表頭資料中1=姓名2=電話3=成績4=null 5=考核結果取得到的list資料中1=null 2=null 3=英文4=語文5=英文6=語文
到此多表頭的導入就結束了,有的人還是不知道怎麼把他存入資料庫,那你就要想想了,最笨的方法就是記得下標填入實體類別中,這個辦法非常不建議不靈活!最好的方法就是用枚舉 匹配 文字 再匹配字段 填充實體類別 再或者 寫個方法 將文字與字段對應上 自動轉換實體類別。

以上是Java easyExcel的多層表頭怎麼導入的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除