亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java?easyExcel的復(fù)雜表頭多級表頭導(dǎo)入

 更新時間:2022年06月20日 16:29:45   作者:頭禿才能變強(qiáng)  
最近在項目開發(fā)中遇到的一個excel復(fù)雜表頭的導(dǎo)入數(shù)據(jù)庫操作,下面這篇文章主要給大家介紹了關(guān)于Java?easyExcel的復(fù)雜表頭多級表頭導(dǎo)入的相關(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 的一級表頭了。

下面導(dǎo)入文件一塊的代碼

//加載攔截器 作用于 獲取表頭
            AnalysisEventMonitor analysisEventMonitor = new AnalysisEventMonitor ();
            //讀取導(dǎo)入的excel 這個地方容易報錯 0?什么的 這個時候就去把excel的文件用高級版本的excel重新導(dǎo)出 因為版本過低的問題
            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類型,這個時候邏輯性好的同學(xué)肯定想到了,這個integer 可不是瞎寫瞎排序的 而是表頭的位置與數(shù)據(jù)遙相呼應(yīng)的。那這個時候就簡單了,我們只需要找到多級表頭的開始位置 即可 下面我會貼圖 然后再做解答。

看到現(xiàn)在 成績是合并了的 多級表頭,這個時候 我們獲取到的表頭集合中的1對應(yīng)姓名 2對應(yīng)電話 3對應(yīng)成績 我們獲取到的數(shù)據(jù)list,代碼寫 list.get(0); 這個獲取到的數(shù)據(jù) 就是二級表頭中的數(shù)據(jù) 這個時候又是拿到了一個map 對應(yīng)關(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=語文
到此 多表頭的導(dǎo)入就結(jié)束了,有的人還是不知道怎么把他存入數(shù)據(jù)庫,那你就要想想了,最笨的方法就是記住下標(biāo) 填充到實體類中,這個辦法非常不推薦 不靈活! 最好辦的辦法就是用枚舉 匹配 文字 再匹配字段 填充實體類 再或者 寫個方法 將文字與字段對應(yīng)上 自動轉(zhuǎn)換實體類。

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

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

總結(jié)

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

相關(guān)文章

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

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

    接口限流是為了保護(hù)系統(tǒng)和服務(wù),防止因為過多的請求而崩潰,本文主要介紹了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)撲克牌程序

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

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

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

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

    這篇文章主要介紹了JAVA實現(xiàn)Excel和PDF上下標(biāo),本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    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多線程詳細(xì)總結(jié)

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

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

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

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

    Mybatis批量更新報錯問題

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

最新評論