传统Excel操作或者解析都是利用Apach POI进行操作,但是使用过这个框架的人都知道,这个框架并不完美,有较多的缺陷:
1、使用步骤繁琐
2、动态写出Excel操作非常麻烦
3、对于新手来说,很难在短时间内上手
4、读写时需要占用较大的内容,当数据量大时容器发生OOM
EasyExcel实现excel导出:
try {
//设置头居中
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
//设置内容居中
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
String fileName = URLEncoder.encode("员工表信息", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
EasyExcel.write(response.getOutputStream(), BasicSysUserExcelData.class)
.autoCloseStream(Boolean.FALSE)
.registerWriteHandler(horizontalCellStyleStrategy)
.sheet("员工表信息")
.doWrite(exportList);
} catch (Exception e) {
response.reset();
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
System.out.println("导出失败");
}
导出对象:
@Data
@HeadRowHeight(20)
@ContentRowHeight(15)
@ColumnWidth(20)
@ContentFontStyle(fontHeightInPoints = (short) 12)
public class BasicSysUserExcelData {
@ExcelProperty(value = "部门名称")
private String deptName;
@ExcelProperty(value = "部门编码")
private Integer deptId;
@ExcelProperty(value = "员工姓名")
private String actualName;
@ExcelProperty(value = "手机号")
private String phone;
@ExcelProperty(value = "邮箱")
private String mail;
@ExcelProperty(value = "创建时间")
private String createTime;
}
更多参考:https://alibaba-easyexcel.github.io/