前言
不知道大家有没有遇到过这种需求 , 导出一个统计结果 , 行和宽的内容都不固定 , 列里面还有嵌套,就如下图所示

(项目特殊要求,列和行的标题内容这边就都清掉了)
大家会不会也是绞尽脑汁呢 , 项目上使用的是alibaba的easyexcel工具 。那今天就给大家介绍下怎么生成导出这么样一个复杂的报表 。基础的easyexcel使用这边就不过多介绍 。
实例
这边给大家展示项目中是如何使用easyexcel导出这个复杂的报表如图所示外层通过response将文件通过流的模式导出到浏览器进行操作 , 具体的处理代码在doWrite里

接下来在dowrite中,首先配置模版,然后获取业务数据,后面就是将业务数据填充到模版对应的位置

通过handle获取业务数据这边 。

在handle方法里,主要是去获取所有的业务数据,然后统一放到List

由于隐私问题 。这里只给大家展示一部分 。可以看到最后的list outNum就是对应着各个条件下各个城市的数量统计 。
模版样式是这样子的,可以看到正常的业务数据是通过data1.的参数进行填充,这个和正常的模版导出一致 。但data2.和data3往后的则是竖过来的,这个就需要调整填充模式,这个后面会详细介绍 。


data1开头的是正常展示的业务数据,采用默认的填充方式 。这个里面的outNum没有填充 , 在后面遍历的时候填充到城市下面的数据 。

Data2开头的城市数据是将list的内容横向生成表头,所以采用横向填充模式,将城市列表名称一一展示成表头 。

接下来展示模版里面data3往后的数据的填充 。

这块内容比较复杂,首先遍历的是vos,这个是正常的业务数据,会纵向填充,这样一行一行的遍历的时候获取到条件下各个城市的指标,这个时候其实是和data2的数据对应的,所以同样修改填充模式向后填充 。将各个城市的数量情况填充起来 。
最后介绍一下样式调整 。可以看到在模版中data2是占据着3行的,但在导出结果中其实是合并过的,这个就是用到了WriteHandler进行处理的

