按模板导出excel
# 功能介绍
框架支持按照自定义模板的方式导出excel, 之前框架中就有这个功能, 整体的用法与之前没有区别
之前数据是存在DataTable中, 所以会存在一个List<Entity> 向DataTable对象转换的过程
后续会封装这转换的过程, 可以支持get一个DataTable对象
# 配置项相关
- excel模板放哪?
项目资源目录下templates/excel/
导出的excel文件在哪?
Http响应:
说明:
导出的位置在项目目录下EciReport中, 部署在服务器上, 文件存在于jar包当前目录下EciReport
DEMO文件夹是 bizType参数, 代码中指定的, excel名称也是代码中fileName指定的
下载链接: http://127.0.0.1:13001/EciReport/DEMO/20240319/代码生成测试.xlsx
# 单表
public String print1() {
// 创建EciReport实例
EciReport report = new EciReport();
// 设置报告使用的模板文件路径
String filePath = "/excel/print1.xlsx";
report.templateFile = filePath;
// 需要转成pdf, 不转就不用加
report.toPdf = true;
// 创建DataSet实例,并将其设置为报告的数据源
DataSet dataSet = new DataSet();
report.dataSource = dataSet;
// 获取并添加数据表到数据源
DataTable dt = getDataTable();
dataSet.addTable(dt);
// 执行报告生成流程
report.execute();
// 保存生成的报告到文件,指定示例名称和描述
report.saveToFile("DEMO","代码生成测试");
// 返回报告的web访问URL
return report.webAccessUrl;
}
// 模拟构造一个DataTable
public DataTable getDataTable(){
DataTable dt = new DataTable();
// 这里需要固定的给 HEAD
dt.setTableName("HEAD");
EntityBase entity = new EntityBase();
entity.put("id",123);
entity.put("name","hello");
entity.put("price",new BigDecimal("12.3"));
entity.put("createTime",new Date());
dt.rows.add(entity);
return dt;
}
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
33
34
35
36
37
38
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
33
34
35
36
37
38
模板
主表的字段使用的是 $
结果
说明:
代码给啥, 就展示啥, 所以这里的时间字段需要自己格式化成自己要展示的格式
# 一主一从
public Object print2() {
// 创建EciReport实例
EciReport report = new EciReport();
// 设置报告使用的模板文件路径
String filePath = "/excel/print2.xlsx";
report.templateFile = filePath;
// 获取并添加数据表到数据源
DataTable head = getDataTableHead();
DataTable list = getDataTableList();
report.addDataTable(head,"GEN_HEAD");
report.addDataTable(list,"GEN_LIST");
// 指定list的一个名称列
report.defineCell = "F";
// 执行报告生成流程, 指定生成主表的名称
report.executeSheet(0,"GEN_HEAD");
// 保存生成的报告到文件,指定示例名称和描述
report.saveToFile("DEMO","一主一从测试");
// 返回报告的web访问URL
return report.webAccessUrl;
}
// 表头的dataTable
private DataTable getDataTableList() {
DataTable dt = new DataTable();
dt.setTableName("GEN_LIST");
List<EntityBase> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
EntityBase entity = new EntityBase();
entity.put("id",i);
entity.put("name","hello"+i);
entity.put("price",new BigDecimal("12.3"));
entity.put("createTime", DateUtils.dateTime(new Date()));
list.add(entity);
}
dt.rows=list;
return dt;
}
// 表体的dataTable
private DataTable getDataTableHead() {
DataTable dt = new DataTable();
dt.setTableName("HEAD");
EntityBase entity = new EntityBase();
entity.put("name","hello");
entity.put("price",new BigDecimal("12.3"));
dt.rows.add(entity);
return dt;
}
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
模板
主表是占位符替换, 从表是需要循环出来的
主表的字段使用的是 $ 从表使用的是 #
结果
# 一主多从
public Object print3() {
// 创建EciReport实例
EciReport report = new EciReport();
// 设置报告使用的模板文件路径
String filePath = "/excel/print3.xlsx";
report.templateFile = filePath;
report.toPdf = true;
// 获取并添加数据表到数据源
DataTable head = getDataTableHead();
DataTable list = getDataTableList();
DataTable list2 = getDataTableList2();
report.addDataTable(head,"GEN_HEAD");
// 从表1
report.addDataTable(list,"GEN_LIST");
// 从表2
report.addDataTable(list2,"GEN_LIST2");
// 指定list的一个名称列
report.defineCell = "F";
// 执行报告生成流程, 指定生成主表的名称
report.executeSheet(0,"GEN_HEAD");
// 保存生成的报告到文件,指定示例名称和描述
report.saveToFile("DEMO","一主多从测试");
// 返回报告的web访问URL
return report.webAccessUrl;
}
private DataTable getDataTableList() {
DataTable dt = new DataTable();
dt.setTableName("GEN_LIST");
List<EntityBase> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
EntityBase entity = new EntityBase();
entity.put("id",i);
entity.put("name","hello"+i);
entity.put("price",new BigDecimal("12.3"));
entity.put("createTime", DateUtils.dateTime(new Date()));
list.add(entity);
}
dt.rows=list;
return dt;
}
private DataTable getDataTableList2() {
DataTable dt = new DataTable();
dt.setTableName("GEN_LIST2");
List<EntityBase> list = new ArrayList<>();
for (int i = 20; i < 25; i++) {
EntityBase entity = new EntityBase();
entity.put("id",i);
entity.put("name","hello"+i);
entity.put("price",new BigDecimal("33"));
entity.put("createTime", DateUtils.dateTime(new Date()));
list.add(entity);
}
dt.rows=list;
return dt;
}
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
模板
结果
上次更新: 2024/5/21 14:16:13