这里 介绍一下单模板和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上传下载相关推荐

  1. 苹果手机mov文件如何复制到电脑_如何在手机上访问电脑上的文件(超详细步骤) iPhone版...

    之前分享了如何在两台电脑上共享文件,如需访问可点击如下链接: Town-Tree:如何在两台电脑之间共享文件(超详细步骤)​zhuanlan.zhihu.com 如何在安卓手机上访问电脑上的文件,可点 ...

  2. php上传文件测试代码,php 文件上传函数的超详细示例

    这篇文章主要为大家详细介绍了php 文件上传函数的超详细示例,具有一定的参考价值,可以用来参考一下. 下面跟随512笔记的小编来举个例子吧. 经测试代码如下: /** * 文件上传 * * 返回的数组 ...

  3. Github上传代码菜鸟超详细教程

    最近需要将课设代码上传到Github上,之前只是用来fork别人的代码. 这篇文章写得是windows下的使用方法. 第一步:创建Github新账户 第二步:新建仓库 第三部:填写名称,简介(可选), ...

  4. stm32移植paho_如何在STM32上移植Linux?超详细的实操经验分享

    原标题:如何在STM32上移植Linux?超详细的实操经验分享 刚从硬件跳槽为嵌软时,没有任何一丝的准备.一入职,领导就交代了一项特难的任务--在stm32上移植linux! 瞬间我就懵了,没办法硬着 ...

  5. 超详细的CentOS7.4下载与图文安装

    一.CentOS7.4下载 官网下载页面地址:Index of / 如果觉得下载比较繁琐,我已经提供了CentOS7.4的安装包: 链接:https://pan.baidu.com/s/1cRgNfZ ...

  6. a股历史行情下载怎么下Excel?如何下载a股历史行情走势数据?

    来讲一下a股历史行情下载怎么下载到本地Excel,要下载a股历史行情走势数据并不难,之前很多券商客户端都提供,不过现在好像都不给下或者有限制了. 只需要两步,0¥,不要下载软件,随时随地在线下载 只要 ...

  7. java代码上传exel,excle上传服务器并解析!求excel上传到服务器的java代码

    如何将数据上传给服务器 医嘱以形式发送过来? 办法有很多,最简单的,就是在机器里,建立2个数据库A,B,假如A是外务器. 在数据库中,以A数据库做发布,让B数据库订阅,弄好以后,A数据库的数据就会自动 ...

  8. Linux上传GitHub【超详细】

    1.选择你想要上传到的GitHub仓库 复制仓库地址的SSH连接,这里也可以选择HTTPS连接: 若选择HTTPS则不需要进行第三步生成SSH key,但后续每次和GitHub仓库之间进行push/p ...

  9. python高级语法装饰器_Python高级编程——装饰器Decorator超详细讲解上

    Python高级编程--装饰器Decorator超详细讲解(上篇) 送你小心心记得关注我哦!! 进入正文 全文摘要 装饰器decorator,是python语言的重要特性,我们平时都会遇到,无论是面向 ...

  10. java实现注册登录版五子棋对战平台(超详细注释,内含人机实现)

    目录 前言 项目介绍 功能演示 登录 注册 选择对手 落子提示 局时步时 查看战绩 落子五连 悔棋 聊天 新局 棋谱 保存棋谱 打开棋谱 其它功能 刷新 上下页 认输 退出 轮播图片 背景音乐 求助小 ...

最新文章

  1. python实现mqtt_Python实现MQTT接收订阅数据
  2. 中国计算机学会CCF推荐国际学术会议和期刊目录-人机交互与普适计算
  3. 大师兄科研网vasp_【回顾】第三临床学院2020年新生科研交流会
  4. java string封装类_java中八种基本数据类型以及它们的封装类,String类型的一些理解...
  5. python三维数据图_matplotlib中三维数据的热图
  6. OPPO Enco Free真无线耳机:超低延迟高音质 智慧触控看得见
  7. git 为什么不能断点_Git 2.29 让 Git 成功“牵手”Gerrit
  8. 如何用BootStrap栅格系统实现响应式布局
  9. 人性的弱点【了解鱼的需求】
  10. ubuntu中火狐浏览器安装flash插件
  11. 宽带速率单位《Mbps-MBps/换算》
  12. 网易 Duilib:功能全面的开源桌面 UI 开发框架
  13. 用手写板向计算机输入汉字是什么技术,手写板是什么
  14. go语言-空结构体/ chan struct{}
  15. 分享微信答题抽奖小程序制作步骤_可以做答题后抽奖活动吗
  16. 微信小程序几个空判断整理
  17. 水桶服务器的作用,我的世界水桶服务器怎么用_我的世界水桶服教程_快吧单机游戏...
  18. 服务器尚图片不显示缩率图,Windows Server 2008 R2 怎么看图预览图片(能不能显示缩略图)...
  19. 孩子不愿意去上学让父母揪心无奈
  20. MyBatis简单使用

热门文章

  1. Java基础(彩票小程序)
  2. Android编程 移动应用开发 经典习题案例 (附案例 注意点)
  3. sql必知必会学习记录(五)
  4. 返回顶部代码 缓慢的返回顶部
  5. 必先利其器——Python机器学习环境搭建
  6. 【C语言函数调用详解】——传值调用传址调用
  7. Kotlin的中文文档
  8. python运维系统开发_老男孩Python运维系统开发教程
  9. Java、前端页面中文乱码解决方式
  10. Java下载安装与环境配置