Java导出查询到的数据列表为Excel并下载
1.背景
工作中经常有需求,需要把列表的数据导出为Excel并下载。EasyExcel工具可以很好的实现这一需求。
2.实现流程
1.引入EasyExcel依赖包
bash
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
2.创建实体VO,添加需要导出的字段并添加注释(根据自己需求创建)
java
public class UserExcelVo {
@ExcelProperty(value = "用户Id")
private String userId;
@ExcelProperty(value = "用户名称")
private String userName;
@ExcelProperty(value = "操作时间")
private String createTime;
}
3.数据库中查到的实体列表转换成VoList
如果字段有需要特殊处理的,需要调用set方法单独设置。
java
List<UserExcelVo > userExcelVos = new ArrayList<>();
for (User user : list) {
UserExcelVo userExcelVo = new UserExcelVo();
BeanUtils.copyProperties(user,userExcelVo);
userExcelVos.add(userExcelVo);
}
4.使用EasyExcel工具导出数据
java
public void export(List<UserExcelVo > userExcelVos ,HttpServletResponse response){
String fileName = "用户记录.xlsx";
try {
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "utf-8"));
OutputStream outputStream =response.getOutputStream();
EasyExcel.write(outputStream,UserExcelVo.class).sheet("用户记录").doWrite(userExcelVos);
}catch (Exception e){
log.error("导出用户记录失败,原因: {}",e.getMessage());
throw new ServiceException("导出用户记录数据失败");
}
}
Controller层和业务层逻辑按自己需求完善,有更好的方法欢迎分享。