前言
在正常开发中经常会遇到需要 文件导出成Excel格式的需求, 本篇主要讲的是运用阿里巴巴EasyExcel ,其实市面上的Excel导出框架,大体上都是在 org.apache.poi的基础上进行封装。
依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.1</version>
</dependency>
用例
@ApiOperation(value = "导出")
@RequestMapping(value = "/getSpecialExcel", method = RequestMethod.POST)
public void download(HttpServletResponse response) throws IOException {
// String PATH = "C:\\Users\\hanshang\\Downloads\\工作文件\\EasyTest.xlsx";
// 数据库查询
List<DataEntity> DataEntities = DataService.list(new QueryWrapper<DataEntity>();
if (DataEntities.size() <= 0) return ;
// 动态表头获取方式,用于设置表头和数据
List<List<String>> listHead = new ArrayList<List<String>>();
List<List<String>> DataList = new ArrayList<List<String>>();
// 模拟动态表头,从集合中获取
DataEntities.stream().forEach( temp ->{
List<String> Head_Temp = new ArrayList();
Head_Temp.add(temp.getName());
listHead.add(Head_Temp);
});
// 设置表具体内容,也是按顺序派发
DataEntities.stream().forEach(temp ->{
List<String> DataTemp = new ArrayList();
DataTemp.add(temp.getKey());
DataList.add(DataTemp);
});
// 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=" + fileName + ".xlsx");
EasyExcel.write(response.getOutputStream()).head(listHead).sheet("模板").doWrite(DataList);
// EasyExcel.write(response.getOutputStream(), DataEntity.class).sheet(模板).doWrite(data());
}
// 省去 get set 构造
@Data
class DataEntity{
private String name;
private String key;
}