diss带码

diss带码

马上订阅 diss带码 RSS 更新: https://dumplingbao.github.io/atom.xml

Davinci-二次开发系列06:导出excel合并单元格

2020年5月14日 12:00

前言

​ 系统数据导出excel已经很具普遍性,不单单是BI有这需求,表单性质的数据大都希望直接导出excel,这个需求甚至比邮件接收更加突出。

​ Davinci导出excel有两种方式,都在dashboard页面

  1. 单个widget导出
  2. 整个dashboard导出,多个sheet页,一个sheet页对应一个widget数据

    表格数据

​ Davinci透视驱动和图表驱动下都有表格的功能,表格中维度指标是自动合并的,效果如下:

图表驱动

table-chart

透视驱动

table-pivot

表格导出excel

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

图表驱动

table-chart-old

透视驱动

table-pivot-old

图表驱动表格excel自动合并单元格

合并后效果图

图表驱动

table-chart-now

透视驱动

table-pivot-now

了解现有逻辑

1
2
3
4
5
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>

通过代码和依赖可以看出采用的poi处理导出excel

改造计划

​ 如果通过现有的方式加入合并单元格的逻辑改造有点麻烦,这里我们直接找较完善的poi合并单元格的方法来直接引用并调用,如果有更好的方式可以一起讨论交流,欢迎留言。

​ 参考poi合并单元格:https://www.cnblogs.com/mr-wuxiansheng/p/7930378.html

代码改造

​ 参考上面链接这里直接提供改造后端的代码

新增PoiInfo实体类,严格意义上这应该是DO这样我们放的DTO下面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package edp.davinci.dto.poiDto;
import lombok.Data;
import java.io.Serializable;
/**
* POI Excel报表导出,列合并实体<br>
*/
@Data
public class PoiInfo implements Serializable{
private static final long serialVersionUID = 1L;
private String content;
private String oldContent;
private int rowIndex;
private int cellIndex;
public PoiInfo() {
}
public PoiInfo(String content, String oldContent, int rowIndex,
int cellIndex) {
this.content = content;
this.oldContent = oldContent;
this.rowIndex = rowIndex;
this.cellIndex = cellIndex;
}
@Override
public String toString() {
return "PoiInfo [content=" + content + ", oldContent=" + oldContent
+ ", rowIndex=" + rowIndex + ", cellIndex=" + cellIndex + "]";
}
}

废弃writeLine方法,新增createSheet方法

1
\server\src\main\java\edp\davinci\service\excel\AbstractSheetWriter.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32...

剩余内容已隐藏

查看完整文章以阅读更多