前言
主要是来了解如何简单的使用eaysExcel,对于EasyExcel 是一个用于读写 Excel 的 Java 库,它的主要优点是处理大数据量时,内存占用极低,因此在性能和效率上都有很好的表现。
官方网址
https://easyexcel.opensource.alibaba.com/docs/current/
可以提供导出模板或者自定义模板去填充数据,
本次就列举一些基本自带的导出操作
引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.3</version>
</dependency>
定义实例类
@Getter
@Setter
@EqualsAndHashCode
public class StudentVO {
@ExcelProperty("id")
@ColumnWidth(20)
private int id;
@ExcelProperty("名称")
@ColumnWidth(20)
private String name;
@ExcelProperty(value = "性别", converter = GenderConverter.class)
@ColumnWidth(10)
private Integer gender;
@ExcelProperty("创建时间")
@ColumnWidth(20)
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date createTime;
}
- @ExcelProperty是列表的标题,
- @ColumnWidth(20)是导出的列表的宽,
-
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")格式化时间
以及其它属性可以去看看
image.png
converter 转换类
@ExcelProperty属性里有个conveter是用来转换枚举的,例如将性别(1转成男,2转成女)

image.png
GenderConverter
新增一个GenderConverter 对性别转换
public class GenderConverter implements Converter<Integer> {
@Override
public Class<?> supportJavaTypeKey() {
return Integer.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public Integer convertToJavaData(ReadConverterContext<?> context) {
return GenderEnum.convert(context.getReadCellData().getStringValue()).getValue();
}
@Override
public WriteCellData<?> convertToExcelData(WriteConverterContext<Integer> context) {
return new WriteCellData<>(GenderEnum.convert(context.getValue()).getDescription());
}
}
注意:
对于导出的话只要注意这个convertToExcelData方法,导出的时候他会根据你的枚举类型转换成对应值,convertToJavaData这个方法是对于导入的时候用到的,这里暂不使用,也可以去掉
性别枚举
@Getter
@AllArgsConstructor
public enum GenderEnum {
/**
* 未知
*/
UNKNOWN(0, "未知"),
/**
* 男性
*/
MALE(1, "男性"),
/**
* 女性
*/
FEMALE(2, "女性");
private final Integer value;
@JsonFormat
private final String description;
public static GenderEnum convert(Integer value) {
return Stream.of(values())
.filter(bean -> bean.value.equals(value))
.findAny()
.orElse(UNKNOWN);
}
public static GenderEnum convert(String description) {
return Stream.of(values())
.filter(bean -> bean.description.equals(description))
.findAny()
.orElse(UNKNOWN);
}
}
导出接口
@RequestMapping(value = "/doEasyExcel")
public void doEasyExcel(HttpServletResponse response) throws IOException {
try {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
String newFileName = URLEncoder.encode(rawFileName, "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + “学生基本信息” + ".xlsx");
List<StudentVO> list = StudentVO.getList();
EasyExcel.write(response.getOutputStream())
.head(StudentVO.class)
// excle 格式
.excelType(ExcelTypeEnum.XLSX)
// 导出sheet名称
.sheet("用户列表")
.doWrite(list);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
导出结果

image.png
结尾
主要是基本学习easyExcel基本的导出功能,用于easyExcel自带的导出模板。总体来说easyExcel还是挺强大好用!
