springboot整合easyexcel进行数据Excel导出导入

学习目标:

  • 一小时学到Excel导入导出

学习内容:

  1. 导入alibaba的开源组件easyexcel依赖
  2. 使用easyexcel进行数据的导出到excel
  3. 使用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) {

    }
}

测试准备工作

  1. 先准备excel表格,里面需要有数据
  2. 需要在对应的实体类上加上 @TableField(“列名”)注解,不然会找不到字段

测试前:
在这里插入图片描述
在这里插入图片描述
上传后:
在这里插入图片描述
在这里插入图片描述

已经上传成功了,在这里我说明一下我excel表格数据为什么要这么写,使用过excel一般都有个习惯,表格第一行头不会作为数据,一般第一行都是名称,然后第一列也是空的因为这列对应数据库是id不需要给数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值