您好,欢迎访问一九零五行业门户网

Java easyExcel的多级表头怎么导入

首先要了解easyexcel怎么获取表头 直接贴代码就不废话了
import com.alibaba.excel.context.analysiscontext;import com.alibaba.excel.event.analysiseventlistener;import lombok.data;import java.util.*;@datapublic 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的多级表头怎么导入的详细内容。
其它类似信息

推荐信息