基于SpringBoot+EasyExcel+vue3实现excel表格的导入和导出
目录
- 基于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();}
查询数据库的所有数据到一个集合useList中
设置输出流
调用EasyExcel中的write方法就会返回一个excel表格
给实体类使用注解标注实体类每一个成员变量所对应的表头(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表格的导入和导出相关推荐
- java excel表格导入_Java实现Excel表格的导入和导出(一)
多说两句:表格的导入导出,是比较常见的系统操作,一般涉及数据批量导入导出时会用到,以前遇到过的业务场景有批量添加会员信息,数据迁移等.实现工具,Apache的poi最为常见.实现简单,博客简单一记. ...
- 六.实战——Excel表格的导入和导出
总结: 导出:写操作,将数据库中的内容写入到excel表格中. 导入:读操作,将excel表格中的内容读出来,插入到数据库中,一般都是先将excel表格中的内容使用流,读到集合(list)中,然后再对 ...
- php操作excel表格的导入和导出
前言:对于excel大家肯定熟悉不过了的,那么我们在日常的业务中应该是有对这些文件的导入导出操作的 类的下载:composer require phpoffice/phpexcel,其中Classes ...
- 基于springboot架构的读取excel 图片并自动上传
基于springboot架构的读取excel 图片并自动上传 excel 图片上传 页面准备 comment.html 逻辑处理准备 控制类CommentController.java 接口类ICom ...
- 基于springboot+uniapp+vue3技术栈开发的开源跨平台小程序
塔可商城, 一个基于springboot+uniapp+vue3技术栈开发的开源跨平台小程序.管理后台,后端服务的项目,它内置提供了会员分销, 区域代理, 商品零售等功能的新零售电商系统.强大弹性的架 ...
- Java解析xml文件dom4j篇(基于xml配置文件完成Excel数据的导入、导出功能完整实现)
DOM4J解析XML文件 dom4j是一个Java的XML API,是jdom的升级产品,用来读写XML文件.另外对比其他API读写XML文件,dom4j是一个十分优秀的JavaXML API,具有性 ...
- python导入excel表格-Python 将Excel表格数据导入MySQL数据库
今天分享一个刚刚完成的Python脚本,一个实用的小技能,就是利用Python代码,将EXCEL表格数据导入到MySQL数据库中!话不多说,下面代码示例. Excel表格数据.jpg 1示例代码: i ...
- PL/SQL Developer将Excel表格数据导入表格
说明,在将excel表格数据导入之前,需要创建一个对应的表. 一.打开PL/SQL Developer之后,选择tools(工具)---ODBC Imoprter(ODBC导入器) 二.选择导入文件的 ...
- Excel表格数据导入
开发工具与关键技术:vs2015 MVC 作者:陈星宇 撰写时间:2019.5.1 当我们学会新增时,都是一条一条数据的新增,当我们需要大量的数据时,我们不妨增加点新东西那就是导入功能,我们来讲一讲关 ...
最新文章
- 张苗 清华大学 计算机,2011222229张苗组件局域网及搭建服务器技术分析.doc
- KubeCon 2019 北美会议完美落幕| 云原生生态周报 Vol. 29
- mysql 基于语句的复制_MySQL 复制 - 性能与扩展性的基石 1:概述及其原理
- php定时执行任务没有执行,linux中定时任务crontab中的php任务无法执行,求可能的原因...
- PTA -- A1046 Shortest Distance
- 一图看懂云栖大会「云原生」发布
- 两平面平行但不重合的条件是_____2012江苏省数学竞赛《提优教程》教案:第77讲_组合几何...
- 深入JavaScript之获取cookie以及删除cookie
- 游戏契合度提示音_产品/市场契合度
- php对联广告,js 左右悬浮对联广告代码示例
- 【 许鹏-1021041305-安装单机版Swarm并试用】
- 小知识:什么是HotFix?HotFix安装步骤及注意事项
- CRS-0804:PROC-26: Error while accessing the physical storage
- MySQL集群:主从模式
- Maven的一个基础pom.xml文件结构
- ORB-SLAM2源码阅读(四)—LoopClosing线程SIM3变换
- 计算机网络技术原理文献,计算机类毕业论文参考文献汇总
- python有道字典_Python3基础 访问在线的有道词典
- 免费的中英文翻译软件-自动批量中英文翻译软件推荐大全
- 四步把流量提升淘宝店铺流量
热门文章
- 2021年茶艺师(初级)考试资料及茶艺师(初级)考试技巧
- ElasticJob定时任务学习总结
- 单独的html怎么实现微信分享,html静态页面实现微信分享思路
- 解决上传SFTPorg.apache.commons.net.MalformedServerReplyException: Could not parse respon
- 数据库管理工具哪个好?强力推荐Navicat Premium 16 mac中文版
- Qt应用程序开发九:上传文件
- ios 高德获取定位_更新日志-iOS 定位SDK | 高德地图API
- 从输入URL到页面加载的过程?由一道题完善自己的前端知识体系!
- 小程序获取微信绑定的手机号
- 郑大网教育计算机2017,郑州大学-“2017中国大学生计算机设计大赛河南省级赛”在郑州大学举行...