一、导入pom
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
相关版本信息可去maven库查询,链接如下:https://mvnrepository.com/artifact/com.alibaba/easyexcel
二、单层表头导出
2.1 固定表头
如果已知导出的表头基本不变,则可以使用以下方法生成对应的表头
定义实体类
@Data
public class MyData {
@ExcelProperty("用户名称")
private String userName;
@ExcelProperty("用户性别")
private String userSex;
@ExcelProperty("用户年龄")
private Integer userAge;
}
调用方法生成excel文件
//生成路径
public static final String PATH = "/Users/lilun/Downloads/";
@Test
public void myData() {
// 文件名称
String fileName = PATH + "myData" + System.currentTimeMillis() + ".xlsx";
// 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
EasyExcel.write(fileName, MyData.class)
//从第0行开始,默认为0
// .relativeHeadRowIndex(0)
//sheet名称
.sheet("模板")
.doWrite(null);
}
生成的文件如下图示
2.2 动态表头
如果表头是动态的,即每次的表头可能都会发生变化,则可以用以下的方法生成文件
@Test
public void myData2() {
// 写法1
String fileName = PATH + "myData2" + System.currentTimeMillis() + ".xlsx";
EasyExcel.write(fileName)
//文件的表头
.head(genHead())
//从第0行开始,默认为0
// .relativeHeadRowIndex(0)
//sheet名称
.sheet("模板")
.doWrite(null);
}
private List<List<String>> genHead() {
//表头list的生成,实际的表头信息可以从数据库或者缓存等处动态读取
List<List<String>> list = new ArrayList<List<String>>();
List<String> head0 = new ArrayList<String>();
head0.add("名称");
List<String> head1 = new ArrayList<String>();
head1.add("年龄");
List<String> head2 = new ArrayList<String>();
head2.add("性别");
list.add(head0);
list.add(head1);
list.add(head2);
return list;
}
生成的文件如下图示
三、多层表头导出
3.1 固定表头
定义实体类
@Data
public class MyComplexData {
@ExcelProperty({"用户", "名称"})
private String name;
@ExcelProperty({"用户", "年龄"})
private Integer age;
@ExcelProperty({"用户", "性别"})
private String sex;
@ExcelProperty({"地址", "国家"})
private String country;
@ExcelProperty({"地址", "省份"})
private String province;
@ExcelProperty( "手机号")
private String phone;
}
@Test
public void MyComplexData() {
// 文件名
String fileName = PATH + "MyComplexData" + System.currentTimeMillis() + ".xlsx";
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
EasyExcel.write(fileName, MyComplexData.class)
//sheet名称
.sheet("模板")
.doWrite(null);
}
文件生成如下图示
3.2 动态表头
private List<List<String>> gemComplexHead() {
//表头list的生成,实际的表头信息可以从数据库或者缓存等处动态读取
List<List<String>> list = new ArrayList<List<String>>();
List<String> head0 = new ArrayList<String>();
//第一层
head0.add("用户");
//第二层
head0.add("名称");
List<String> head1 = new ArrayList<String>();
//第一层
head1.add("用户");
//第二层
head1.add("年龄");
List<String> head2 = new ArrayList<String>();
//第一层
head2.add("用户");
//第二层
head2.add("性别");
list.add(head0);
list.add(head1);
list.add(head2);
List<String> head3 = new ArrayList<String>();
head3.add("手机号");
List<String> head4 = new ArrayList<String>();
//第一层
head4.add("地址");
//第二层
head4.add("国家");
List<String> head5 = new ArrayList<String>();
//第一层
head5.add("地址");
//第二层
head5.add("省份");
list.add(head3);
list.add(head4);
list.add(head5);
return list;
}
@Test
public void MyComplexData2() {
// 文件名
String fileName = PATH + "MyComplexData2" + System.currentTimeMillis() + ".xlsx";
EasyExcel.write(fileName)
//文件的表头
.head(gemComplexHead())
.sheet("模板")
.doWrite(null);
}
生成的文件如下图示