当前位置:   article > 正文

使用SpringBoot完成excel表格导入导出_excel导入 spring boot

excel导入 spring boot

导入依赖:

  1. <!-- 要有这个包,才能使用excel -->
  2. <dependency>
  3. <groupId>cn.hutool</groupId>
  4. <artifactId>hutool-all</artifactId>
  5. <version>5.8.18</version>
  6. </dependency>
  7. <!-- 导出导入excel也要使用这个 -->
  8. <dependency>
  9. <groupId>org.apache.poi</groupId>
  10. <artifactId>poi-ooxml</artifactId>
  11. <version>4.1.2</version>
  12. </dependency>
导出

Controlller:(其余不用改)

  1. /**
  2. * 导出Excel表格
  3. */
  4. @GetMapping("/export")
  5. public Result export(Department department, HttpServletResponse response) throws IOException {
  6. // 将一行一行的数据放到list集合里面
  7. // 每一行数据代表java的一个实体类
  8. // 1、从数据库中查询所有数据
  9. List<Department> departments = departmentService.selectAll(department);
  10. // 判断是否为空-为空不生成excel
  11. // 2、定义一个List和Map<key,value>出来,存储处理之后的数据,用于塞到List里
  12. List<Map<String,Object>> list = new ArrayList<>(departments.size());
  13. // 3、遍历每一条数据,然后封装到 Map<key,value>里,把这个map塞到list里
  14. for (Department department1 : departments) {
  15. Map<String,Object> row = new HashMap<>();
  16. row.put("社团名称",department1.getName());
  17. row.put("社团介绍",department1.getDescription());
  18. row.put("社长名称",department1.getUserName());
  19. row.put("社团创建时间",department1.getTime());
  20. row.put("指导老师",department1.getTeacherName());
  21. list.add(row);
  22. }
  23. // 4、创建一个ExcelWriter,把 list数据用这个writer写出来
  24. ExcelWriter wr = ExcelUtil.getWriter(true);
  25. // write()第二个参数为true,使用row的key作为表头,然后key一样就会放到同一列上
  26. wr.write(list,true);
  27. //5、把这个excel下载下来
  28. response.setContentType("application");
  29. response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
  30. // filename=department.xlsx" 设置导出excel表格文件名
  31. response.setHeader("Content-Disposition","attachment;filename=department.xlsx");
  32. ServletOutputStream out = response.getOutputStream();
  33. wr.flush(out, true);
  34. wr.close();
  35. IoUtil.close(System.out);
  36. return Result.success();
  37. }

Vue

  1. <el-button type="success" plain @click="exp()">批量导出</el-button>
  2. // 批量导出
  3. exp(){
  4. // 拿到user,将其封装成JSON对象(如果一开始user是Joson就不用转了,我的不是)
  5. let userJson = JSON.stringify(this.user);
  6. // 路径+token就行
  7. location.href = "http://localhost:9090/department/export?token="+JSON.parse(userJson).token
  8. }
导入

从excel表格中导入:

  1. package com.example.entity;
  2. import cn.hutool.core.annotation.Alias;
  3. import com.baomidou.mybatisplus.annotation.IdType;
  4. import com.baomidou.mybatisplus.annotation.TableField;
  5. import com.baomidou.mybatisplus.annotation.TableId;
  6. import lombok.Data;
  7. import java.io.Serializable;
  8. /**
  9. * 社团信息表
  10. */
  11. @Data
  12. public class Department implements Serializable {
  13. private static final long serialVersionUID = 1L;
  14. /**
  15. * 社团id
  16. */
  17. /**
  18. * 主键id
  19. */
  20. @TableId(value = "id", type = IdType.AUTO)
  21. private Integer id;
  22. /**
  23. * 社团名称
  24. */
  25. @Alias("社团名称")
  26. private String name;
  27. /**
  28. * 社团介绍
  29. */
  30. @Alias("社团介绍")
  31. private String description;
  32. /**
  33. * 社团的发布时间(其实也是社团的创建时间)
  34. */
  35. @Alias("社团创建时间")
  36. private String time;
  37. }

Controller:(Service和Mapper自己写插入即可)

  1. @PostMapping("/upload")
  2. public Result upload(MultipartFile file) throws IOException{
  3. // Department.class 这个导入时要转换成的实体类,我的是Department类
  4. List<Department> departments = ExcelUtil.getReader(file.getInputStream()).readAll(Department.class);
  5. if(!CollectionUtil.isEmpty(departments)){
  6. for (Department department : departments) {
  7. try{
  8. // 写自己service添加数据的方法就行
  9. departmentService.add(department);
  10. }catch (Exception e){
  11. e.printStackTrace();
  12. }
  13. }
  14. }
  15. return Result.success();
  16. }

前端:

  1. <el-upload
  2. :action="$baseUrl + '/department/upload'"
  3. style="display: inline-block;margin-left:10px "
  4. :show-file-list="false"
  5. :headers="{ token: user.token }" //没用到token就不加或者放行也行
  6. :on-success="successUpload"
  7. >
  8. <el-button type="primary">批量导入</el-button>
  9. </el-upload>

方法:

  1. successUpload(res){
  2. this.$message.success("批量导入成功")
  3. this.load(1);
  4. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/551627
推荐阅读
相关标签
  

闽ICP备14008679号