前言
系统数据导出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,感兴趣的可以加一下。