EasyExcel的表头操作

上一节我们使用EasyExcel框架的四种方式将数据输出到Excel文件中,实现了如下图的效果:

其中序号、员工号、员工姓名等是各个列的表头(灰色单元格),接下来这一部分我们要对表头进行相关操作。

一、输出无表头数据

案例:不输出表头,显示效果如下图所示:

EasyExcel框架中有一个类AbstractExcelWriterParameterBuilder,这是一个抽象类,在这个类中有一个方法needHead,参数是Boolean类型,如果传入的值是false就可以确保表头不再输出,以下是执行的代码:

1
2
3
4
5
6
7
8
9
10
@Test
public void test() {
String filePath = EmployeeUtils.getFilePath();
EasyExcel.write(filePath, Employee.class)
// 不输出表头
.needHead(false)
.sheet("测试工作表")
.doWrite(EmployeeUtils.getDataList());
System.out.println("数据成功写出到Excel文件中");
}

此时执行这段代码就不会出现表头信息,符合我们预期目标:

二、输出复杂表头

案例:输出的Excel文件表头如下图所示:

由上述表头我们发现员工信息表和其他属性(例如:序号、员工号等)是一对多的关系,为了更加直观地在代码中显示,我们需要将图中的关系进一步拆解一对一的关系:

1
2
3
4
5
6
员工信息表 --> 序号
员工信息表 --> 员工号
员工信息表 --> 员工姓名
员工信息表 --> 年龄
员工信息表 --> 性别
员工信息表 --> 生日

这样拆解以后,我们就可以在@ExcelProperty中使用value属性了,这个属性本身是一个字符串数组,要想发生类似上图表头合并,需要满足如下条件:

  • 类中的属性之间必须相邻;
  • 属性使用@ExcelProprety修饰并且注解中包含value属性(字符串数组);
  • 字符串数组中相同的索引值对应的字符串值完全相同。

根据上述内容,我们将实体类Employee属性中的注解做一点改动,代码如下:

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
package com.icode504.entity;

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.*;

import java.util.Date;

/**
* 员工--实体类
*
* @author iCode504
* @date 2024-03-18
*/
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
public class Employee {

// 序号
@ExcelProperty({"员工信息表","序号"})
private Integer id;

// 员工号
@ExcelProperty({"员工信息表", "员工号"})
private String employeeId;

// 员工姓名
@ExcelProperty({"员工信息表", "员工姓名"})
private String employeeName;

// 年龄
@ExcelProperty({"员工信息表", "年龄"})
private Integer age;

// 性别(男/女)
@ExcelProperty({"员工信息表", "性别"})
private String gender;

// 生日
@ExcelProperty({"员工信息表", "生日"})
private Date birthday;

// 构造器、getter、setter已省略...
}

我们再运行一次EasyExcel代码来导出Excel文件:

1
2
3
4
5
6
7
8
@Test
public void test() throws Exception {
String filePath = EmployeeUtils.getFilePath();
EasyExcel.write(filePath, Employee.class)
.sheet("模板")
.doWrite(EmployeeUtils.getDataList());
System.out.println("数据成功写出到Excel文件中");
}

此时生成的表头符合案例的要求:

三、知识点总结

EasyExcel的表头操作的知识点总结如下图所示: