官网地址: EasyExcel
本文代码: EasyExcelDemo
在开发中Excel的导入导出是非常常见的需求,最近在项目中用到了阿里的EasyExcel
,简单学习下,还是比较容易上手的。下面记录下
EasyExcel介绍
EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。
导入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.2</version>
</dependency>
导出
例如现在要导出如下Excel:
使用模型导出
使用模型
导出时,EasyExcel会根据导出实体中 @ExcelProperty
注解生成表头
- 模型注解说明
@HeadRowHeight:设置表头高度,作用域在类
@ExcelIgnoreUnannotated:忽略没有注解标记的字段,作用域在类
@ExcelIgnore:忽略指定的字段,作用域在字段
@ExcelProperty:指定导出列名和索引,作用域在字段
@ColumnWidth:设置列的宽度,作用域在字段
@NumberFormat:设置数值精度,作用域在字段,例:@NumberFormat(value = "#.00")
@DateTimeFormat:格式化日期,作用域在字段,例:@DateTimeFormat(value = "yyyy-MM-dd")
- 建立模型
@Data
@NoArgsConstructor
@AllArgsConstructor
@ColumnWidth(15) // 设置列宽
public class ExcelDemoDto {
@ExcelProperty("字符串测试1")
private String column1;
@ExcelProperty("字符串测试2")
private String column2;
@ExcelProperty("数字测试")
private BigDecimal number;
@ExcelProperty("日期测试")
@DateTimeFormat(value = "yyyy-MM-dd")
private Date date;
}
- 导出实现
public void easyWrite(HttpServletResponse response) throws IOException {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode防止中文乱码
String fileName = URLEncoder.encode("导出", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
ServletOutputStream outputStream = response.getOutputStream();
// 获取导出数据
List<ExcelDemoDto> exportData = new ArrayList<>();
ExcelDemoDto excelDemoDto = new ExcelDemoDto("zjm","520", BigDecimal.valueOf(20),new Date());
exportData.add(excelDemoDto);
// 初始化ExcelWriter
ExcelWriter writer = EasyExcel.write(outputStream).build();
// 初始化一个sheet
WriteSheet sheet1 = EasyExcel.writerSheet(0, "sheet1")
.head(ExcelDemoDto.class)
.registerWriteH