上一节我们使用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;
@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;
}
|
我们再运行一次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的表头操作的知识点总结如下图所示:
