第一步:引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.1</version>
</dependency>
第二部:创建与excel中第一行字段对应的实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ModelOfExcel {
@ExcelProperty("姓名")
private String name;
@ExcelProperty("年龄")
private int age;
@ExcelProperty("性别")
private String sex;
}
其中@Data,@AllArgsConstructor,@NoArgsConstructor,@ToString 代表有参构造,无参构造,getter和setter等,lombok依赖特性。
@ExcelProperty表示指定生成excel后的每列的列名称。稍后截图看效果。
第三步:编写业务逻辑接口测试。
@RestController
@Api(tags = "测试excel导出")
@RequestMapping("testexcel")
public class ExcelController {
@GetMapping("getExcel")
@ApiOperation(value = "导出excel")
@ResponseBody
public void getExcel(HttpServletResponse response) throws IOException {
List<ModelOfExcel> list=new ArrayList<>();
list.add(new ModelOfExcel("张三",21,"男"));
list.add(new ModelOfExcel("李四",32,"男"));
list.add(new ModelOfExcel("小翠",20,"女"));
//设置返回输出流的格式
response.setContentType("application/vnd.ms-excel");
//设置响应头部信息,格式为附件,文件名为expert.xlsx
response.setHeader("Content-Disposition","attachment; filename=" + "testexcel.xlsx");
writeExcel(response,list);
}
public static void writeExcel(HttpServletResponse response, List<ModelOfExcel> list) throws IOException {
ExcelWriter excelWriter= EasyExcel.write(response.getOutputStream()).build();
//sheet的含义相当于一张工作表
WriteSheet sheet=EasyExcel.writerSheet(0,"sheet").head(ModelOfExcel.class).build();
//往excel中写入数据
excelWriter.write(list,sheet);
//关闭写入流
excelWriter.finish();
}
}
这里我采用自定义创建对象填充数据,也可以用数据库中的数据进行填充。
接口返回的内容封装在HttpServletResponse中:
最后可以进行测试,这里采用swagger-ui测试
可以得到一个名为testexcel.xlsx的文件夹,打开后内容如下:
结果说明测试很成功!