excel导出动态表头以及二级三级表头,还有数据库动态的数据来源

之所以写博客是记录一下日常的工作,也算是技术的总结,第一次写有什么不足的欢迎大家指出。
一、先来看一下,我们要导出的需求样式。本次使用的技术是java的poi导出excel。在这里插入图片描述
本次用到的工具有idea,Tomcat,Navicat,mysql数据库等等。
用的框架是mybatis和springmvc。使用的依赖有apache的poi3.9版本。你们要用别的版本也是可以像那种easyPOI。如果你不是做那种动态的。可以直接使用,就是把实体类加一个@excel注解写死表头。

org.apache.poi poi-ooxml 3.9

二、首先要像导出动态的数据以及动态表头,我们就要分别传输数据给前端,就是使用map,里面放2个key,value。例如
在这里插入图片描述
这种形式返回,这样前端只需要遍历一下就可以拿到数据,对应的数据会自动跟着表头的字段显示。

三、先看一下我们数据库储存的表头,我这次的表头可以实现自定义模板和自定义列。下面会一一讲解。
在这里插入图片描述
这个是后台一个完整模板,用户可以自定义去修改。用户不会改动到SYS级别的模板。后续用户要自定义的话,是会再次储存一套记录在数据库中。

四、使用mybatis查询到这些表头。

在这里插入图片描述
我们可以根据你这个表格是什么业务,让前端传对应的数据。可以看到上面listName是业务综合,所以只要传业务综合,我们就可以查询出来一级表头。

五、二级以及三级表头。
像前面图片看到的二级头,我们是可以做动态的(包括三级头)。
在这里插入图片描述
先是定义一个集合,准备拿去接收数据。然后 foreach一下查询到的一级表头数据。因为我是有储存一级头的字段和字段名。所以可以直接get出来。判断是否相等,这样直接add二级表头进去。里面我有封装了一个方法。在实体类里面定义一个
在这里插入图片描述
这样就可以套娃了。给一级头加二级头。

六、接下来说说数据是怎么导到excel上的。
在这里插入图片描述
ModelAndView是Http请求过程中返回的模型和视图,具体大伙可以百度搜一下,这里就不做讲解了。

首先我们来看看这个导出excel的类有那些参数。我们需要定义一个最大行和最大列。还有一个集合用来储存表头。还有一个参数类,为了别的excel导出能够共用,就提出去了。
在这里插入图片描述
在这里插入图片描述
很多是你们不需要用到的参数。所以就不用一一讲解了,最主要的是list那个是用来储存数据的。

七、excel的创建
在这里插入图片描述
这边是创建一个excel,设置风格什么的,具体大家可以根据自己想要的进行修改。
因为我这个是三级表头,所以定义了一个[3][99] 三行的数组。

八、遍历表头以及数据
在这里插入图片描述
先要定义一个int,因为excel默认第一行是0开始的。这边的代码是先创建excel然后再填入数据,所以想要j–;一下。

九、合并excel

在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
EasyExcel可以非常灵活地导出动态表头。你可以根据需要动态生成表头,并将数据导出Excel文件中。下面是一个简单的示例: ```java // 创建ExcelWriter对象 String fileName = "path/to/excel/file.xlsx"; ExcelWriter excelWriter = EasyExcel.write(fileName).build(); // 动态生成表头 List<List<String>> head = new ArrayList<>(); List<String> headRow = new ArrayList<>(); headRow.add("姓名"); headRow.add("年龄"); head.add(headRow); // 写入表头 WriteSheet writeSheet = EasyExcel.writerSheet(0).head(head).build(); // 准备数据 List<List<Object>> data = new ArrayList<>(); List<Object> dataRow = new ArrayList<>(); dataRow.add("张三"); dataRow.add(20); data.add(dataRow); // 写入数据 excelWriter.write(data, writeSheet); // 完成导出 excelWriter.finish(); ``` 在这个例子中,我们首先创建了一个`ExcelWriter`对象,并指定了导出的文件名。然后,我们动态生成了表头信息,并将其存储在`head`列表中。接下来,我们创建了一个`WriteSheet`对象,并使用`head`列表作为表头信息传递给`head()`方法。然后,我们准备了数据,并将其存储在`data`列表中。最后,我们使用`excelWriter.write()`方法将数据写入到Excel文件中,并使用`excelWriter.finish()`方法完成导出。 这只是一个简单的示例,你可以根据自己的需求进行调整和扩展。EasyExcel提供了更多的API和功能,可以满足各种导出需求。请参考EasyExcel的官方文档和示例代码,以获取更详细的信息和用法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值