前言 该方式适用于前端页面点击导出然后将数据导出成excel文件的场景
依据导出数据实体类来自动导出我们想要的字段数据
1.导入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
2.导入数据实体类上贴上注解@ExcelIgnore,如果某个字段不用导出,贴上注解@ExcelIgnore,如下
@ExcelIgnore(value = "id")
private Long id;
@ExcelProperty(value = "name")
private String name;
3.工具方法
/**
* 方法描述: 浏览器点击导出后导出文件
*
* @param response 响应
* @param list 导出数据集合
* @param fileName 文件名 不含后缀
* @param clazz 导出数据的数据类型
* @return void
* @author wqf
* @date 2021/4/15 16:05
*/
public static void exportExcel(HttpServletResponse response, List<?> list,
String fileName, Class<?> clazz) throws IOException {
if (CollectionUtils.isEmpty(list)) {
throw new RuntimeException();
}
if (StringUtils.isEmpty(fileName)) {
fileName = new Date().toString();
}
String sheetName = fileName;
// 使用swagger 会有问题,请直接用浏览器或者用postman
try {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
//防止中文乱码
fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
// 这里需要设置不关闭流
EasyExcel.write(response.getOutputStream(), clazz).autoCloseStream(Boolean.FALSE).sheet(sheetName)
.doWrite(list);
} catch (Exception e) {
log.warn("文件下载失败!");
}
}
网友评论