最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2022年06月20日 16:29:45   作者:頭禿才能變強(qiáng)  
最近在項(xiàng)目開(kāi)發(fā)中遇到的一個(gè)excel復(fù)雜表頭的導(dǎo)入數(shù)據(jù)庫(kù)操作,下面這篇文章主要給大家介紹了關(guān)于Java?easyExcel的復(fù)雜表頭多級(jí)表頭導(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>> {
    /**
     * 存儲(chǔ)Key
     */
    Map<Integer, String> key = new HashMap<>();
    /**
     * keuList
     */
    List<String> keyList=new ArrayList<>();

    public AnalysisEventMonitor() {
    }
    /**
     * 重寫(xiě)invokeHeadMap方法,獲去表頭,如果有需要獲取第一行表頭就重寫(xiě)這個(gè)方法,不需要?jiǎng)t不需要重寫(xiě)
     *
     * @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表格的時(shí)候攔截表頭

類自己創(chuàng)建 繼承AnalysisEventListener 就可以 然后重寫(xiě)她的invokeHeadMap方法就可以獲取到excel 的一級(jí)表頭了。

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

//加載攔截器 作用于 獲取表頭
            AnalysisEventMonitor analysisEventMonitor = new AnalysisEventMonitor ();
            //讀取導(dǎo)入的excel 這個(gè)地方容易報(bào)錯(cuò) 0?什么的 這個(gè)時(shí)候就去把excel的文件用高級(jí)版本的excel重新導(dǎo)出 因?yàn)榘姹具^(guò)低的問(wèn)題
            List<Map<Integer,Object>> list = EasyExcel.read(file.getInputStream(),analysisEventMonitor ).sheet(0).doReadSync();
            //獲取攔截器攔截到的 表頭的Map集合
            Map<Integer, String> key = analysisEventMonitor .getKey();
            

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

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • java 中Spark中將對(duì)象序列化存儲(chǔ)到hdfs

    java 中Spark中將對(duì)象序列化存儲(chǔ)到hdfs

    這篇文章主要介紹了java 中Spark中將對(duì)象序列化存儲(chǔ)到hdfs的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • java實(shí)現(xiàn)的正則工具類

    java實(shí)現(xiàn)的正則工具類

    這篇文章主要介紹了java實(shí)現(xiàn)的正則工具類,可用于針對(duì)電話號(hào)碼、郵箱、QQ號(hào)碼、QQ密碼、手機(jī)號(hào)的正則驗(yàn)證功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • Java垃圾回收器的方法和原理總結(jié)

    Java垃圾回收器的方法和原理總結(jié)

    本篇文章主要介紹了Java垃圾回收器的方法和原理總結(jié),Java垃圾回收器是Java虛擬機(jī)的重要模塊,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2016-12-12
  • Java開(kāi)發(fā)神器Lombok使用詳解

    Java開(kāi)發(fā)神器Lombok使用詳解

    這篇文章主要介紹了Java開(kāi)發(fā)神器Lombok使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 使用Java的Lucene搜索工具對(duì)檢索結(jié)果進(jìn)行分組和分頁(yè)

    使用Java的Lucene搜索工具對(duì)檢索結(jié)果進(jìn)行分組和分頁(yè)

    這篇文章主要介紹了使用Java的搜索工具Lucene對(duì)檢索結(jié)果進(jìn)行分組和分頁(yè)的方法,Luence是Java環(huán)境中的一個(gè)全文檢索引擎工具包,需要的朋友可以參考下
    2016-03-03
  • 基于Struts2實(shí)現(xiàn)防止表單重復(fù)提交

    基于Struts2實(shí)現(xiàn)防止表單重復(fù)提交

    這篇文章主要介紹了基于Struts2實(shí)現(xiàn)防止表單重復(fù)提交,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java中String判斷值為null或空及地址是否相等的問(wèn)題

    Java中String判斷值為null或空及地址是否相等的問(wèn)題

    這篇文章主要介紹了Java中String判斷值為null或空及地址是否相等的問(wèn)題,文中舉了簡(jiǎn)單的例子對(duì)字符串類型的值和地址問(wèn)題進(jìn)行講解,需要的朋友可以參考下
    2016-01-01
  • Spring?Boot提高開(kāi)發(fā)效率必備工具lombok使用

    Spring?Boot提高開(kāi)發(fā)效率必備工具lombok使用

    這篇文章主要為大家介紹了Spring?Boot提高開(kāi)發(fā)效率的必備工具lombok使用方法示例及步驟說(shuō)明,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-03-03
  • 10個(gè)經(jīng)典的Java main方法面試題

    10個(gè)經(jīng)典的Java main方法面試題

    這篇文章主要為大家分享了10個(gè)經(jīng)典的Java main方法面試題,與其說(shuō)是Java面試題,其實(shí)也是Java的一些最基礎(chǔ)知識(shí)問(wèn)題,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Java中volatile關(guān)鍵字的作用

    Java中volatile關(guān)鍵字的作用

    這篇文章主要介紹了Java中volatile關(guān)鍵字的作用,文章基于Java的相關(guān)資料展開(kāi)對(duì)volatile關(guān)鍵字作用的詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04

最新評(píng)論

山东| 邢台市| 金昌市| 民乐县| 临漳县| 南木林县| 普定县| 唐河县| 霍林郭勒市| 米泉市| 德阳市| 富阳市| 榕江县| 翁源县| 汕头市| 岢岚县| 汾西县| 丽水市| 唐山市| 石棉县| 攀枝花市| 察隅县| 宽甸| 诏安县| 平昌县| 荆门市| 宜君县| 靖西县| 涿鹿县| 广平县| 拜城县| 漾濞| 侯马市| 绥德县| 西乌珠穆沁旗| 溆浦县| 陵川县| 丹巴县| 灵丘县| 惠州市| 吉安市|