目录

  • 基于SpringBoot+EasyExcel+vue3实现excel表格的导入和导出
  • 一、导入和导出
  • 二、导出数据为excel实现过程
  • 三、将excel中的数据导入到数据库中

基于SpringBoot+EasyExcel+vue3实现excel表格的导入和导出

一、导入和导出

导入:通过解析excel表格中的数据,然后将数据放到一个集合中,接着通过对持久层操作,将数据插入到数据库中,再加载一下页面,从而实现了数据的导入

导出:导出也是直接对数据库进行操作,获取数据库中所有的数据,将其存储在一个集中,接着使用查询出来的的数据生成一个excel表格

其中导入和导出的功能实现都是基于EasyExcel实现的

EasyExcel是阿里巴巴开源的一个基于Java的简单、省内存的读写Excel的开源项目

EasyExcel官方文档:https://www.yuque.com/easyexcel/doc/easyexcel

        <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.0-beta2</version></dependency>

二、导出数据为excel实现过程

    @GetMapping("/down")public Result down(HttpServletResponse response) throws IOException {List<User> userList = userMapper.selectList(null);System.out.println(userList);//返回输出流_excel格式response.setContentType("application/octet-stream");String fileName = URLEncoder.encode("用户信息表", "UTF-8").replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");EasyExcel.write(response.getOutputStream(), User.class).autoCloseStream(Boolean.FALSE).sheet("用户信息表").doWrite(userList);// ExcelUtil.writerExcel(response, userList);return Result.success();}
  1. 查询数据库的所有数据到一个集合useList中

  2. 设置输出流

  3. 调用EasyExcel中的write方法就会返回一个excel表格

  4. 给实体类使用注解标注实体类每一个成员变量所对应的表头(value为表头名称,index为表头位置)

    package com.kang.domain;import com.alibaba.excel.annotation.ExcelProperty;
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableId;
    import com.baomidou.mybatisplus.annotation.TableName;
    import lombok.Data;
    import lombok.EqualsAndHashCode;
    import lombok.NoArgsConstructor;/*** @ClassName User* @Description TODO* @Author kang* @Date 2022/3/7 上午 8:07* @Version 1.0*/
    @Data
    @TableName("user")
    @NoArgsConstructor
    @EqualsAndHashCode
    public class User {/*** id自增*/@TableId(type = IdType.AUTO)@ExcelProperty(value = "ID", index = 0)private Integer id;@ExcelProperty(value = "用户名", index = 1)private String username;@ExcelProperty(value = "密码", index = 2)private String password;/*** 数据库中的nick_name会自动转换为驼峰*/@ExcelProperty(value = "昵称", index = 3)private String nickName;@ExcelProperty(value = "年龄", index = 4)private Integer age;@ExcelProperty(value = "性别", index = 5)private String sex;@ExcelProperty(value = "住址", index = 6)private String address;}

当浏览器访问这个前端控制器的映射地址的时候,就会自动下载这样的一个excel文件

因此,在前端只需要给按钮添加一个点击事件,当点击这个按钮的时候,就访问前端控制器,从而实现导出功能

download(){window.location.href='http://localhost:9090/excel/down';this.$message.success("导出成功");},

三、将excel中的数据导入到数据库中

导出功能需要用的一个文件上传的组件,这里用的是vue3组件库中element-plus提供的el-upload组件

      <el-uploadclass="upload-demo"multiple=""method="post"action="api/excel/updown"style="margin-left: 10px"accept=".xlsx,.xls":show-file-list="false":on-success="success"name="files"><el-button type="primary">导入</el-button></el-upload>

当前比较重要的一个属性就是action,这里action所对应的是前端控制器的映射地址,也就是说选择文件会传送到地址对应的前端控制器,前端控制就可以获取这个文件

    @PostMapping("/updown")public Result  upload(@RequestParam("files") MultipartFile file) throws IOException {EasyExcel.read(file.getInputStream(), User.class, new DataListener(userMapper)).sheet().doRead();return Result.success();}

然后通过EasyExcel的read方法实现对excel的读取功能

在read方法中需要提供一个监视器

public class DataListener extends AnalysisEventListener<User> {/*** 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收*/private static final int BATCH_COUNT = 100;private UserMapper userMapper;public DataListener(UserMapper userMapper){this.userMapper = userMapper;}List<User> list = new ArrayList<User>();//读取数据会执行这方法@Overridepublic void invoke(User user, AnalysisContext analysisContext) {System.out.println(JSON.toJSONString(user));list.add(user);System.out.println(list);if (list.size() >= BATCH_COUNT){list.clear();}}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {saveData();System.out.println("所有数据解析完成");}private void saveData(){System.out.println(this.userMapper);System.out.println("{" + list.size() + "}条数据,开始存储数据库" );for (User user : list) {userMapper.insert(user);}System.out.println("存储数据库成功");}
}

注意:这个数据监听器不可以被springboot所代理,需要人工new出来,因此里面写了一个构造方法,用dao层作为参数创建,在new的时候将这个dao层的相对于的类作为构造参数,从而使得监听器可以完成对持久层的操作

基于SpringBoot+EasyExcel+vue3实现excel表格的导入和导出相关推荐

  1. java excel表格导入_Java实现Excel表格的导入和导出(一)

    多说两句:表格的导入导出,是比较常见的系统操作,一般涉及数据批量导入导出时会用到,以前遇到过的业务场景有批量添加会员信息,数据迁移等.实现工具,Apache的poi最为常见.实现简单,博客简单一记. ...

  2. 六.实战——Excel表格的导入和导出

    总结: 导出:写操作,将数据库中的内容写入到excel表格中. 导入:读操作,将excel表格中的内容读出来,插入到数据库中,一般都是先将excel表格中的内容使用流,读到集合(list)中,然后再对 ...

  3. php操作excel表格的导入和导出

    前言:对于excel大家肯定熟悉不过了的,那么我们在日常的业务中应该是有对这些文件的导入导出操作的 类的下载:composer require phpoffice/phpexcel,其中Classes ...

  4. 基于springboot架构的读取excel 图片并自动上传

    基于springboot架构的读取excel 图片并自动上传 excel 图片上传 页面准备 comment.html 逻辑处理准备 控制类CommentController.java 接口类ICom ...

  5. 基于springboot+uniapp+vue3技术栈开发的开源跨平台小程序

    塔可商城, 一个基于springboot+uniapp+vue3技术栈开发的开源跨平台小程序.管理后台,后端服务的项目,它内置提供了会员分销, 区域代理, 商品零售等功能的新零售电商系统.强大弹性的架 ...

  6. Java解析xml文件dom4j篇(基于xml配置文件完成Excel数据的导入、导出功能完整实现)

    DOM4J解析XML文件 dom4j是一个Java的XML API,是jdom的升级产品,用来读写XML文件.另外对比其他API读写XML文件,dom4j是一个十分优秀的JavaXML API,具有性 ...

  7. python导入excel表格-Python 将Excel表格数据导入MySQL数据库

    今天分享一个刚刚完成的Python脚本,一个实用的小技能,就是利用Python代码,将EXCEL表格数据导入到MySQL数据库中!话不多说,下面代码示例. Excel表格数据.jpg 1示例代码: i ...

  8. PL/SQL Developer将Excel表格数据导入表格

    说明,在将excel表格数据导入之前,需要创建一个对应的表. 一.打开PL/SQL Developer之后,选择tools(工具)---ODBC Imoprter(ODBC导入器) 二.选择导入文件的 ...

  9. Excel表格数据导入

    开发工具与关键技术:vs2015 MVC 作者:陈星宇 撰写时间:2019.5.1 当我们学会新增时,都是一条一条数据的新增,当我们需要大量的数据时,我们不妨增加点新东西那就是导入功能,我们来讲一讲关 ...

最新文章

  1. 张苗 清华大学 计算机,2011222229张苗组件局域网及搭建服务器技术分析.doc
  2. KubeCon 2019 北美会议完美落幕| 云原生生态周报 Vol. 29
  3. mysql 基于语句的复制_MySQL 复制 - 性能与扩展性的基石 1:概述及其原理
  4. php定时执行任务没有执行,linux中定时任务crontab中的php任务无法执行,求可能的原因...
  5. PTA -- A1046 Shortest Distance
  6. 一图看懂云栖大会「云原生」发布
  7. 两平面平行但不重合的条件是_____2012江苏省数学竞赛《提优教程》教案:第77讲_组合几何...
  8. 深入JavaScript之获取cookie以及删除cookie
  9. 游戏契合度提示音_产品/市场契合度
  10. php对联广告,js 左右悬浮对联广告代码示例
  11. 【 许鹏-1021041305-安装单机版Swarm并试用】
  12. 小知识:什么是HotFix?HotFix安装步骤及注意事项
  13. CRS-0804:PROC-26: Error while accessing the physical storage
  14. MySQL集群:主从模式
  15. Maven的一个基础pom.xml文件结构
  16. ORB-SLAM2源码阅读(四)—LoopClosing线程SIM3变换
  17. 计算机网络技术原理文献,计算机类毕业论文参考文献汇总
  18. python有道字典_Python3基础 访问在线的有道词典
  19. 免费的中英文翻译软件-自动批量中英文翻译软件推荐大全
  20. 四步把流量提升淘宝店铺流量

热门文章

  1. 2021年茶艺师(初级)考试资料及茶艺师(初级)考试技巧
  2. ElasticJob定时任务学习总结
  3. 单独的html怎么实现微信分享,html静态页面实现微信分享思路
  4. 解决上传SFTPorg.apache.commons.net.MalformedServerReplyException: Could not parse respon
  5. 数据库管理工具哪个好?强力推荐Navicat Premium 16 mac中文版
  6. Qt应用程序开发九:上传文件
  7. ios 高德获取定位_更新日志-iOS 定位SDK | 高德地图API
  8. 从输入URL到页面加载的过程?由一道题完善自己的前端知识体系!
  9. 小程序获取微信绑定的手机号
  10. 郑大网教育计算机2017,郑州大学-“2017中国大学生计算机设计大赛河南省级赛”在郑州大学举行...