阿里巴巴 EasyExcel (web版) 上传与下载(超详细) Excel上传下载
这里 介绍一下单模板和N个模板都可以用的
首先咱们先来看一下单模板的
一. 导入 pom依赖
<dependency> <groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.0.2</version></dependency>
二.创建一个类(随便一个类)并让这个类继承 AnalysisEventListener<实体类> 并实现里面的方法(具体看下方代码)
public class ExcelListener extends AnalysisEventListener<ExcelModel> {// ExcelModel :实体类//自定义用于暂时存储data。//可以通过实例获取该值private List<ExcelModel> datas = new ArrayList<>();//private List<Map<String,Object>> datas = new ArrayList<>(); //根据需求也可选择用map来接收// @Override
// public void invoke(Map<String,Object> map, AnalysisContext analysisContext) {//
// datas.add(map);//数据存储到list,供批量处理,或后续自己业务逻辑处理。
//
// }@Overridepublic void invoke(ExcelModel excelModel, AnalysisContext analysisContext) {//此方法一行一行的读取Excel内容if (excelModel.getUsername() != null) { //做一个简单的判断,可根据自己的业务逻辑更改datas.add(excelModel);//数据存储到list,供批量处理,或后续自己业务逻辑处理。}}public void doAfterAllAnalysed(AnalysisContext context) {// datas.clear();//解析结束销毁不用的资源,也可待数据入库后在进行销毁,根据具体业务需求自行更改}public List<ExcelModel> getDatas() { //把存储的数据通过此方法暴露出去return datas;}
}
三. 创建所用到的实体类(Excel模板)
@Scope("prototype")
@Data //此注释需要导入lombok
@ContentRowHeight(25) //数据表格列高
@HeadRowHeight(20) //标题表格列高
@ColumnWidth(25) //标题表格列宽
public class ExcelModel {// private String id;@ExcelProperty(value = "姓名",index = 0) //index表示读取的数据在第几列,根据业务需求自行对应private String username;@ExcelProperty(value = "年龄",index = 1)private String userage;@ExcelProperty(value = "邮箱",index = 2)private String useremail;
}
四.接下来就是调用刚才写完的东西
@RequestMapping("uploadExcel")@ResponseBodypublic void uploadExcel(MultipartFile excelFile) throws IOException {ExcelListener listener = new ExcelListener(); //ExcelListener 上面创建的那个类EasyExcel.read(excelFile.getInputStream(), ExcelModel.class,listener).sheet(0).doReadSync(); //ExcelModel 上面创建的实体类System.out.println("解析完之后的数据:---"+listener.getDatas());List<ExcelModel> datas = listener.getDatas(); //把拿到的数据处理到集合里去(根据所需自行修改)baseService.insertExcelService(datas);//入库datas.clear();//结束后销毁不用的资源System.out.println(datas); //查看销毁后的结果}
上面单模板的实现到此结束,下面咱们来看多个模板的操作
直接改一下ExcelListener这个类
// 具体代码
public class ExcelListener extends AnalysisEventListener { //在这里不给它指定具体模板(实体类)private List<Map<String,Object>> datas = new ArrayList<>();@Overridepublic void invoke(Object obj, AnalysisContext analysisContext) {Map<String,Object> map =new HashMap<>();map.put("maps",obj);datas.add(map);System.out.println("读取的很一行的数据:---"+obj);}public void doAfterAllAnalysed(AnalysisContext context) {// datas.clear();//解析结束销毁不用的资源}
}
Controller中的改动
public int getExcelData(MultipartFile excelFile, String type) throws IOException {ExcelListener listener = new ExcelListener();int i =0;if ("agricul".equals(type)){ //根据传过来的type来判断用哪个模板(实体类)List<Object> objects = EasyExcel.read(excelFile.getInputStream(), ExcelModel.class, listener).sheet(0).doReadSync();for (Object ii:objects) {ExcelModel mod= (ExcelModel) ii; //把拿过来的Object转换成具体实体类if(mod.getCityid()==null || mod.getCounttotal()==null || mod.getNtptwoid()==null ||mod.getCityid()==0){ //做一些简单的判断continue;}// System.out.println(mod);i = mpntpMapper.insert(mod); //入库}return i;}}
最后就是下载了没什么好说的具体看代码吧
@RequestMapping("/downloadExcel")public void downloadExcel(HttpServletResponse response) throws Exception {response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf-8");List<ExcelModel> list = baseService.selectExcelService(); //数据库中获取的数据String fileName = URLEncoder.encode(UUID.randomUUID().toString().replaceAll("-",""), "UTF-8");response.setHeader("Content-disposition", "attachment;filename="+fileName+".xlsx");EasyExcel.write(response.getOutputStream(),ExcelModel.class).sheet("sheet1").doWrite(list);}
其实具体的变化主要就是在ExcelListener类中进行更改逻辑条件,有什么问题小伙伴们可以留言,大家一起学习,祝大家好运!
官方文档:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write
自定义单元格样式:https://blog.csdn.net/weixin_47691902/article/details/115198670?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-115198670-blog-126995032.pc_relevant_3mothn_strategy_recovery&spm=1001.2101.3001.4242.2&utm_relevant_index=4
阿里巴巴 EasyExcel (web版) 上传与下载(超详细) Excel上传下载相关推荐
- 苹果手机mov文件如何复制到电脑_如何在手机上访问电脑上的文件(超详细步骤) iPhone版...
之前分享了如何在两台电脑上共享文件,如需访问可点击如下链接: Town-Tree:如何在两台电脑之间共享文件(超详细步骤)zhuanlan.zhihu.com 如何在安卓手机上访问电脑上的文件,可点 ...
- php上传文件测试代码,php 文件上传函数的超详细示例
这篇文章主要为大家详细介绍了php 文件上传函数的超详细示例,具有一定的参考价值,可以用来参考一下. 下面跟随512笔记的小编来举个例子吧. 经测试代码如下: /** * 文件上传 * * 返回的数组 ...
- Github上传代码菜鸟超详细教程
最近需要将课设代码上传到Github上,之前只是用来fork别人的代码. 这篇文章写得是windows下的使用方法. 第一步:创建Github新账户 第二步:新建仓库 第三部:填写名称,简介(可选), ...
- stm32移植paho_如何在STM32上移植Linux?超详细的实操经验分享
原标题:如何在STM32上移植Linux?超详细的实操经验分享 刚从硬件跳槽为嵌软时,没有任何一丝的准备.一入职,领导就交代了一项特难的任务--在stm32上移植linux! 瞬间我就懵了,没办法硬着 ...
- 超详细的CentOS7.4下载与图文安装
一.CentOS7.4下载 官网下载页面地址:Index of / 如果觉得下载比较繁琐,我已经提供了CentOS7.4的安装包: 链接:https://pan.baidu.com/s/1cRgNfZ ...
- a股历史行情下载怎么下Excel?如何下载a股历史行情走势数据?
来讲一下a股历史行情下载怎么下载到本地Excel,要下载a股历史行情走势数据并不难,之前很多券商客户端都提供,不过现在好像都不给下或者有限制了. 只需要两步,0¥,不要下载软件,随时随地在线下载 只要 ...
- java代码上传exel,excle上传服务器并解析!求excel上传到服务器的java代码
如何将数据上传给服务器 医嘱以形式发送过来? 办法有很多,最简单的,就是在机器里,建立2个数据库A,B,假如A是外务器. 在数据库中,以A数据库做发布,让B数据库订阅,弄好以后,A数据库的数据就会自动 ...
- Linux上传GitHub【超详细】
1.选择你想要上传到的GitHub仓库 复制仓库地址的SSH连接,这里也可以选择HTTPS连接: 若选择HTTPS则不需要进行第三步生成SSH key,但后续每次和GitHub仓库之间进行push/p ...
- python高级语法装饰器_Python高级编程——装饰器Decorator超详细讲解上
Python高级编程--装饰器Decorator超详细讲解(上篇) 送你小心心记得关注我哦!! 进入正文 全文摘要 装饰器decorator,是python语言的重要特性,我们平时都会遇到,无论是面向 ...
- java实现注册登录版五子棋对战平台(超详细注释,内含人机实现)
目录 前言 项目介绍 功能演示 登录 注册 选择对手 落子提示 局时步时 查看战绩 落子五连 悔棋 聊天 新局 棋谱 保存棋谱 打开棋谱 其它功能 刷新 上下页 认输 退出 轮播图片 背景音乐 求助小 ...
最新文章
- python实现mqtt_Python实现MQTT接收订阅数据
- 中国计算机学会CCF推荐国际学术会议和期刊目录-人机交互与普适计算
- 大师兄科研网vasp_【回顾】第三临床学院2020年新生科研交流会
- java string封装类_java中八种基本数据类型以及它们的封装类,String类型的一些理解...
- python三维数据图_matplotlib中三维数据的热图
- OPPO Enco Free真无线耳机:超低延迟高音质 智慧触控看得见
- git 为什么不能断点_Git 2.29 让 Git 成功“牵手”Gerrit
- 如何用BootStrap栅格系统实现响应式布局
- 人性的弱点【了解鱼的需求】
- ubuntu中火狐浏览器安装flash插件
- 宽带速率单位《Mbps-MBps/换算》
- 网易 Duilib:功能全面的开源桌面 UI 开发框架
- 用手写板向计算机输入汉字是什么技术,手写板是什么
- go语言-空结构体/ chan struct{}
- 分享微信答题抽奖小程序制作步骤_可以做答题后抽奖活动吗
- 微信小程序几个空判断整理
- 水桶服务器的作用,我的世界水桶服务器怎么用_我的世界水桶服教程_快吧单机游戏...
- 服务器尚图片不显示缩率图,Windows Server 2008 R2 怎么看图预览图片(能不能显示缩略图)...
- 孩子不愿意去上学让父母揪心无奈
- MyBatis简单使用