您好,登錄后才能下訂單哦!
這篇文章主要介紹了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 可不是瞎寫瞎排序的 而是表頭的位置與數據遙相呼應的。那這個時候就簡單了,我們只需要找到多級表頭的開始位置 即可 下面我會貼圖 然后再做解答。
看到現在 成績是合并了的 多級表頭,這個時候 我們獲取到的表頭集合中的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的多級表頭怎么導入”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。