中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java?easyExcel的多級表頭怎么導入

發布時間:2022-06-21 09:36:07 來源:億速云 閱讀:762 作者:iii 欄目:開發技術

這篇文章主要介紹了Java easyExcel的多級表頭怎么導入的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Java easyExcel的多級表頭怎么導入文章都會有所收獲,下面我們一起來看看吧。

首先要了解

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的多級表頭怎么導入”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Java easyExcel的多級表頭怎么導入”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鲁山县| 威海市| 平远县| 双流县| 宾川县| 彰化县| 罗源县| 南和县| 宜兰市| 乐陵市| 台中市| 夹江县| 台中县| 昌邑市| 松溪县| 固原市| 武汉市| 民丰县| 宿松县| 荔浦县| 富平县| 镇宁| 霍林郭勒市| 皮山县| 巩留县| 昭苏县| 辉南县| 肇源县| 齐河县| 泽州县| 嘉义县| 天柱县| 宁远县| 沁阳市| 普兰店市| 阳新县| 岢岚县| 宁晋县| 华宁县| 高邮市| 普定县|