写在前面:
本篇文章详细介绍一下在企业中常常用到的EasyPoi导出操作,也就是将数据库汇总持久化的数据从数据库中导入到Excel表格中,因为,Excel表格对于非开发人员来讲更加的容易接受。
任务展示:
下面展示的是我数据库中存储的用户信息数据,假设公司非开发人员需要用到这些数据,我们需要将导出到Excel中并交给他们。
小细节:图片也要导出到Excel表格中
实战开发:
1、导入EasyPoi相关依赖
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>4.0.0</version>
</dependency>
2、编写实体类(重点)
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User {
@Excel(name = "ID")
private String id;
@Excel(name ="昵称")
private String name;
@Excel(name="真实姓名")
private String realname;
@Excel(name = "注册日期",format = "yyyy-MM-dd")
private Date reg_date;
@Excel(name ="性别",replace = {"男_0","女_1"})
private String sex;
@Excel(name = "状态",replace = {"激活_0","冻结_1"})
private String status;
@Excel(name = "头像",type = 2,width = 40 , height = 20)
private String img;
}
关于图片的小细节:需要在Excel中添加一个type属性值,并将值设置为2。height和width的值可以根据需要进行设置。
3、编写serviceImpl(重点)
@Override
public void export( HttpServletResponse res) throws IOException {
//从数据库中将用户信息查询出来
List<User> all = userDAO.findAll();
//因为数据库中只存了图片的名字,我们在这里需要对于图片路径封装到User对象中
for (User user : all) {
String img = user.getImg();
//图片在项目中的存储路径前缀
String path = "http://localhost:8989/cmfz_lsg/bootstrap/img/";
//图片在项目中的存储路径
String newPath= path+img;
user.setImg(newPath);
}
Workbook wb = ExcelExportUtil.exportExcel(new ExportParams("持明法州用户信息表", "VIP用户", "员工信息表"), User.class, all);
try {
//设置下载的文件名,中文需要进行编码处理
String encode = URLEncoder.encode("用户信息表.xls", "UTF-8");
//设置响应头信息,以附件形式下载
res.setHeader("content-disposition","attachment;filename="+encode);
//获取输出流
ServletOutputStream outputStream = res.getOutputStream();
wb.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
}finally {
//关闭资源
wb.close();
}
4、编写控制层(非重点)
为了流程的完整性,这里我将控制层的代码也贴出来。
@RequestMapping("poiOut")
public void poiOut(HttpServletResponse response){
try {
//就是对service的方法进行调用
userService.export(response);
} catch (IOException e) {
e.printStackTrace();
}
}
5、前端页面展示
点击导出按钮,向后台发送导出请求即可。
成功展示:
1、点击导出按钮
自定义下载的位置。