学习目标:
- 一小时学到Excel导入导出
学习内容:
- 导入alibaba的开源组件easyexcel依赖
- 使用easyexcel进行数据的导出到excel
- 使用easyexcel进行数据的导入到数据库
导出实现步骤:
先创建springboot项目,导入easyexcel依赖,创建对应的包,例如controller,先实现数据的导出
导入easyexcel依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.6</version>
</dependency>
编写导出接口
@PostMapping("/exportData")
public void exportData(HttpServletResponse response){
userService.exportData(response);
}
直接到业务实现层,注释也写的比较清楚,不在过多解释,
@Override
public void exportData(HttpServletResponse response) {
//设置下载信息
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = "userinfo";
response.setHeader("Content-disposition", "attachment;filename="+ fileName + ".xlsx");
//查询数据库
List<User> userList = this.list();
//调用方法进行写操作
try {
EasyExcel.write(response.getOutputStream(), User.class).sheet("userinfo")
.doWrite(userList);
} catch (IOException e) {
e.printStackTrace();
}
}
结果:因为没有前端页面,所以我配置了swagger-ui进行测试,数据正常进行导出成功,实现步骤也很简单
导入实现步骤:
学会了导出的excel,信息导入也很简单,俩者区别不是很大,下面开始实行代码
第一步:
//导入
@PostMapping("/importData")
public R importData(MultipartFile file){
permissionService.importData(file);
return R.ok();
}
直接到业务实现层,MultipartFile用来接收上传的文件,
@Override
public void importData(MultipartFile file) {
try {
EasyExcel.read(file.getInputStream(),Permission.class,new PermissionListener(baseMapper)).sheet().doRead();
} catch (IOException e) {
e.printStackTrace();
}
}
这一步才是上传,所谓的上传就是把excel数据读取出来然后保存到数据库里面去
public class PermissionListener extends AnalysisEventListener<Permission> {
@Autowired
private PermissionMapper permissionMapper;
public PermissionListener(PermissionMapper permissionMapper) {
this.permissionMapper = permissionMapper;
}
/**
* 一行一行读取excel内容,从二行读取,因为第一行可能不是数据
*/
@Override
public void invoke(Permission permission, AnalysisContext analysisContext) {
permissionMapper.insert(permission);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
测试准备工作
- 先准备excel表格,里面需要有数据
- 需要在对应的实体类上加上 @TableField(“列名”)注解,不然会找不到字段
测试前:
上传后:
已经上传成功了,在这里我说明一下我excel表格数据为什么要这么写,使用过excel一般都有个习惯,表格第一行头不会作为数据,一般第一行都是名称,然后第一列也是空的因为这列对应数据库是id不需要给数据