欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?easyExcel的復雜表頭多級表頭導入

 更新時間:2022年06月20日 16:29:45   作者:頭禿才能變強  
最近在項目開發(fā)中遇到的一個excel復雜表頭的導入數(shù)據(jù)庫操作,下面這篇文章主要給大家介紹了關(guān)于Java?easyExcel的復雜表頭多級表頭導入的相關(guān)資料,需要的朋友可以參考下

首先要了解

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每行解析的數(shù)據(jù)為Map<Integer, String>類型,Integer是Excel的列索引,String為Excel的單元格值
     * @param context context能獲取一些東西,比如context.readRowHolder().getRowIndex()為Excel的行索引,表頭的行索引為0,0之后的都解析成數(shù)據(jù)
     */
    @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表格的時候攔截表頭

類自己創(chuàng)建 繼承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();
            

現(xiàn)在 我們拿到了數(shù)據(jù)也拿到了表頭。有的人就會好奇了,你只是獲取了一級表頭,那我二級表頭怎么辦? 別著急 聽我慢慢說。

上方的代碼塊, 第二行獲取了excel的數(shù)據(jù) 這個數(shù)據(jù)是去掉了一級表頭之后的數(shù)據(jù),說到這 可能有的人就懂了,有的人還是不懂 ok 我們繼續(xù)說,第三行代碼 是我們攔截器攔截的表頭的集合 可以看出來 是以map接收的 map的key是一個Integer類型,欸 巧了,我們的數(shù)據(jù) list 其中也包了個map而且 map的key 恰好也是Integer類型,這個時候邏輯性好的同學肯定想到了,這個integer 可不是瞎寫瞎排序的 而是表頭的位置與數(shù)據(jù)遙相呼應的。那這個時候就簡單了,我們只需要找到多級表頭的開始位置 即可 下面我會貼圖 然后再做解答。

看到現(xiàn)在 成績是合并了的 多級表頭,這個時候 我們獲取到的表頭集合中的1對應姓名 2對應電話 3對應成績 我們獲取到的數(shù)據(jù)list,代碼寫 list.get(0); 這個獲取到的數(shù)據(jù) 就是二級表頭中的數(shù)據(jù) 這個時候又是拿到了一個map 對應關(guān)系分別是 1=null 2=null 3=英語 4=語文。 這個時候又有人說了 如果我后面再多一個多級表頭怎么辦? 貼圖。

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

有的人說 如果我是不固定的表頭怎么辦呢?

那更簡單了,不固定的表頭 但是你不可能沒有固定的列吧 如果沒有固定的列 全部都是不固定的表頭 那你就只能做兩個表 一個表存字段名稱的中文 一個表對應其中的數(shù)據(jù),可以自己好好想想。如果是有固定的列 那你就獲取固定列的文字 進行判斷 然后再獲取其中不固定的表頭 將其填充。 授人以魚不如授人以漁 凡事還是多動腦筋,辦法已經(jīng)教了 我也不可能面面俱到

總結(jié)

到此這篇關(guān)于Java easyExcel的復雜表頭多級表頭導入的文章就介紹到這了,更多相關(guān)Java easyExcel表頭導入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringCloud+Redis實現(xiàn)Api接口限流防止惡意刷接口

    SpringCloud+Redis實現(xiàn)Api接口限流防止惡意刷接口

    接口限流是為了保護系統(tǒng)和服務,防止因為過多的請求而崩潰,本文主要介紹了SpringCloud+Redis實現(xiàn)Api接口限流防止惡意刷接口,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • 詳解Zookeeper基礎(chǔ)知識

    詳解Zookeeper基礎(chǔ)知識

    本文主要講解了Zookeeper的基礎(chǔ)知識,ZooKeeper提供了一個通用協(xié)調(diào)模式實現(xiàn)方法的開源共享庫,使程序員免于寫這類通用的協(xié)議。關(guān)于Zookeeper更多相關(guān)知識,感興趣的小伙伴參考一下這篇文章
    2021-09-09
  • Java實現(xiàn)撲克牌程序

    Java實現(xiàn)撲克牌程序

    這篇文章主要為大家詳細介紹了Java實現(xiàn)撲克牌程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 如何獲取包下所有類中的注解的值(java工具類)

    如何獲取包下所有類中的注解的值(java工具類)

    這篇文章主要介紹了如何獲取包下所有類中的注解的值 (java工具類),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • JAVA實現(xiàn)Excel和PDF上下標的操作代碼

    JAVA實現(xiàn)Excel和PDF上下標的操作代碼

    這篇文章主要介紹了JAVA實現(xiàn)Excel和PDF上下標,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Java 順序表專題解讀

    Java 順序表專題解讀

    順序表,全名順序存儲結(jié)構(gòu),是線性表的一種。線性表用于存儲邏輯關(guān)系為“一對一”的數(shù)據(jù),順序表自然也不例外,不僅如此,順序表對數(shù)據(jù)物理存儲結(jié)構(gòu)也有要求。順序表存儲數(shù)據(jù)時,會提前申請一整塊足夠大小的物理空間,然后將數(shù)據(jù)依次存儲起來,存儲時數(shù)據(jù)元素間不留縫隙
    2021-11-11
  • Spring?Boot?內(nèi)置工具類ReflectionUtils的實現(xiàn)

    Spring?Boot?內(nèi)置工具類ReflectionUtils的實現(xiàn)

    ReflectionUtils是一個反射工具類,它封裝了Java反射的操作,使得我們能夠更輕松地操作和訪問類的方法、字段,本文主要介紹了Spring?Boot?內(nèi)置工具類ReflectionUtils的實現(xiàn),感興趣的可以了解一下
    2023-11-11
  • java多線程詳細總結(jié)

    java多線程詳細總結(jié)

    以下小編就對java中的多線程進行了詳細的總結(jié)分析,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • springboot+vue制作后臺管理系統(tǒng)項目

    springboot+vue制作后臺管理系統(tǒng)項目

    本文詳細介紹了后臺管理使用springboot+vue制作,以分步驟、圖文的形式詳細講解,大家有需要的可以參考參考
    2021-08-08
  • Mybatis批量更新報錯問題

    Mybatis批量更新報錯問題

    這篇文章主要介紹了Mybatis批量更新報錯的問題及解決辦法,包括mybatis批量更新的兩種方式,需要的的朋友參考下
    2017-01-01

最新評論