<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
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 可不是瞎寫瞎排序的 而是表頭的位置與資料遙相呼應的。那這個時候就簡單了,我們只需要找到多級表頭的開始位置 即可 下面我會貼圖 然後再做解答。
看到現在 成績是合併了的 多級表頭,這個時候 我們獲取到的表頭集合中的1對應姓名 2對應電話 3對應成績 我們獲取到的資料list,程式碼寫 list.get(0); 這個獲取到的資料 就是二級表頭中的資料 這個時候又是拿到了一個map 對應關係分別是 1=null 2=null 3=英語 4=語文。 這個時候又有人說了 如果我後面再多一個多級表頭怎麼辦? 貼圖。
這個時候 我們獲取到的表頭資料中 1=姓名 2=電話 3=成績 4=null 5=考核結果 獲取到的list資料中 1=null 2=null 3=英語 4=語文 5=英語 6=語文
到此 多表頭的匯入就結束了,有的人還是不知道怎麼把他存入資料庫,那你就要想想了,最笨的方法就是記住下標 填充到實體類中,這個辦法非常不推薦 不靈活! 最好辦的辦法就是用列舉 匹配 文字 再匹配欄位 填充實體類 再或者 寫個方法 將文字與欄位對應上 自動轉換實體類。
那更簡單了,不固定的表頭 但是你不可能沒有固定的列吧 如果沒有固定的列 全部都是不固定的表頭 那你就只能做兩個表 一個表存欄位名稱的中文 一個表對應其中的資料,可以自己好好想想。如果是有固定的列 那你就獲取固定列的文字 進行判斷 然後再獲取其中不固定的表頭 將其填充。 授人以魚不如授人以漁 凡事還是多動腦筋,辦法已經教了 我也不可能面面俱到
到此這篇關於Java easyExcel的複雜表頭多級表頭匯入的文章就介紹到這了,更多相關Java easyExcel表頭匯入內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45