开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情
前言
EasyExcel 是阿里开源的,很好用的操作 Excel 的框架,这篇文章介绍 EasyExcel 常用的写操作。
使用
- 首先,在pom.xml文件中添加 EasyExcel 的 Maven 依赖,我使用的版本是3.1.0。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.0</version>
</dependency>
- 定义一个简单的实体类 User。ExcelProperty 注解的 value 属性指定了列名,如果没有指定的话列名就是属性名。
@Data
public class User {
@ExcelProperty(value="编号")
private int id;
@ExcelProperty(value="姓名")
private String name;
@ExcelProperty(value = "性别")
private int flag;
}
- 一个通用的获取数据的方法。
private List<User> data() {
List<User> dataList = new ArrayList<>();
for(int i = 0;i < 10;i ++) {
User user = new User();
user.setId(i);
user.setName("名称" + i);
user.setFlag(i % 2);
dataList.add(user);
}
return dataList;
}
最简单的写操作
调用 Excel.write 方法,第一个参数传入 fileName 参数,指定要导出的文件地址,第二个参数指定了 User 类,这样在导出的时候第一行会导出属性名称。
真正写操作是 doWrite() 方法,传入要写入 Excel 的数据列表。
String fileName = "D:/test.xlsx";
EasyExcel.write(fileName,User.class).sheet().doWrite(data());
- excel 示例
使用模板写操作
- 模板excel示例
String fileName = "D:/test.xlsx";
String templateFileName = "D:/demo.xlsx";
EasyExcel.write(fileName,User.class).withTemplate(templateFileName).sheet().doWrite(data());
- excel示例
自定义转换器
自定义转换器FlagConverter,实现com.alibaba.excel.converters.Converter接口,并实现其中的接口。
@ExcelProperty注解的converter指定FlagConverter。
@ExcelProperty(value = "性别",converter = FlagConverter.class)
private int flag;
public class FlagConverter implements Converter<Integer> {
@Override
public Class supportJavaTypeKey() {
return Integer.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public WriteCellData convertToExcelData(Integer value, ExcelContentProperty contentProperty,
GlobalConfiguration globalConfiguration) {
String res = "";
if(value == 0) {
res = "男";
} else {
res = "女";
}
return new WriteCellData(res);
}
}
- excel 示例
样式
使用注解设置头部样式。
//设置头部行高
@HeadRowHeight(20)
//设置头背景颜色
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 10)
//设置头部字体大小
@HeadFontStyle(fontHeightInPoints = 14)
public class User {
}
- excel示例
使用注解设置内容样式。
@ExcelProperty("姓名")
//设置背景亮黄色
@ContentStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 5)
private String name;
- excel 示例