前言
 系统数据导出excel已经很具普遍性,不单单是BI有这需求,表单性质的数据大都希望直接导出excel,这个需求甚至比邮件接收更加突出。
 Davinci导出excel有两种方式,都在dashboard页面
 Davinci透视驱动和图表驱动下都有表格的功能,表格中维度指标是自动合并的,效果如下:
图表驱动

透视驱动

表格导出excel
 这里先不考虑图形效果的数据导出,表格数据更希望导出excel是相同的样式,也就是自动合并单元格,现有的表格数据导出效果如下:
图表驱动

透视驱动

图表驱动表格excel自动合并单元格
合并后效果图
图表驱动

透视驱动

了解现有逻辑
1  | <dependency>  | 
通过代码和依赖可以看出采用的poi处理导出excel
改造计划
 如果通过现有的方式加入合并单元格的逻辑改造有点麻烦,这里我们直接找较完善的poi合并单元格的方法来直接引用并调用,如果有更好的方式可以一起讨论交流,欢迎留言。
 参考poi合并单元格:https://www.cnblogs.com/mr-wuxiansheng/p/7930378.html
代码改造
 参考上面链接这里直接提供改造后端的代码
一
新增PoiInfo实体类,严格意义上这应该是DO这样我们放的DTO下面
1  | package edp.davinci.dto.poiDto;  | 
二
废弃writeLine方法,新增createSheet方法
1  | \server\src\main\java\edp\davinci\service\excel\AbstractSheetWriter.java  | 
1  | /**  | 
三
放弃原来template.query 使用lambda表达式的调用方式(注释部分),修改如下
1  | \server\src\main\java\edp\davinci\service\excel\SheetWorker.java  | 
1  | // template.query(sql, rs -> {  | 
完成以上配置,效果就有了
存在问题
透视驱动表头样式
 目前无法做到透视驱动的表头样式,数据导出excel也仅仅和图表驱动类似的单元格数据的合并。

表头样式进行分组合并影响导出
 表头样式进行分组合并设置,会影响导出,后续再进行处理。

图表驱动表格合并存在不合理情形
数据第一层维度数据不同,第二次数据相同合并,似乎不合理,excel做了处理,这样就不一致,如下情况:

交流学习
学习Metabase、Davinci等开源BI,群号:72569367,感兴趣的可以加一下。