最近遇到了一个excel简单的导入导出的需求,因此就对easyexcel第三方插件的使用做一点总结,大家可以看一看,可能会对你有点帮助。

目录

前言:

1、引入easyexcel相关依赖

2、创建对应excel的实体类

3、导入excel,并保存到数据库表中

4、导入excel的服务操作

5、得到结果,保存数据到数据库

6、读取数据库数据写入excel

7、总结


前言:

项目是一个springboot 项目,使用maven对依赖进行管理,需求有两个是:

①导入的excel有模板,即表头是明确的(简单)

②导入的excel没有模板,即表头是不明确的

此篇博客主要讲述easyexcel对于需求①的开发,关于需求②会在下一篇博客中进行讲解,地址(二)easyexcel 的使用(读取数据到map集合中)_网恋褙骗八万的博客-CSDN博客

1、引入easyexcel相关依赖

<!--   easyexcel     --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.1</version></dependency>

2、创建对应excel的实体类

excel模板如下:

对应的实体类:(注解 @ExcelProperty是easyexcel自带的注解,可以通过value绑定值即绑定到表头的方式,让每个属性对应到表头,当然也可以使用index进行索引的绑定。)

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import lombok.ToString;/*** @Author 不要有情绪的  ljy* @Date 2022/11/4 19:01* @Description:*/
@Data
@ToString
public class FaultInfoData {@ExcelProperty(value = "产品专业")private String productSpeacialty;@ExcelProperty(value = "产品类别")private String productCategory;@ExcelProperty(value = "产品规格")private String productSpecification;@ExcelProperty(value = "故障时间")private String faultTimeString;@ExcelProperty(value = "故障型号")private String faultModel;@ExcelProperty(value = "故障原因")private String faultReason;@ExcelProperty(value = "解决方案")private String faultSolution;}

3、导入excel,并保存到数据库表中


import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.bjsasc.productksys.exceptionHandler.SelfDefinitionException;
import com.bjsasc.productksys.faultinfoservice.entity.FaultInfo;
import com.bjsasc.productksys.faultinfoservice.entity.excel.FaultInfoData;
import com.bjsasc.productksys.faultinfoservice.service.FaultInfoService;
import com.bjsasc.productksys.utils.StringToDateUtil;
import org.springframework.beans.BeanUtils;import java.util.Date;
import java.util.Map;/*** @Author 不要有情绪的  ljy* @Date 2022/11/4 19:20* @Description:*/
public class FaultExcelListener extends AnalysisEventListener<FaultInfoData> {private FaultInfoService faultInfoService;private int treeNodeId;public FaultExcelListener(FaultInfoService faultInfoService) {this.faultInfoService = faultInfoService;}public FaultExcelListener() {}public FaultExcelListener(FaultInfoService faultInfoService, int treeNodeId) {this.faultInfoService = faultInfoService;this.treeNodeId = treeNodeId;}//一行一行读取,然后使用new FaultInfo,把faultInfoData 使用copy的一个工具类复制过去,然后使用service直接save函数进行保存到数据库@Overridepublic void invoke(FaultInfoData faultInfoData, AnalysisContext analysisContext) {//表示excel中没有数据,就不需要读取了if (faultInfoData == null) {throw new SelfDefinitionException(20001, "故障信息导入失败!");}
//        System.out.println(faultInfoData);//用于临时的一个对象,保存到数据库中的实例FaultInfo faultInfo = new FaultInfo();//使用工具类将FaultInfoData类拷贝给FaultInfo类BeanUtils.copyProperties(faultInfoData, faultInfo);  //这儿是将faultInfoData拷贝到faultInfo//设置树的节点,此时的树节点应该为前端传递过来的树节点idfaultInfo.setSysTreeId(treeNodeId);faultInfoService.save(faultInfo);}//读取excel表头信息@Overridepublic void invokeHeadMap(Map<Integer, String> headMap, AnalysisContextcontext) {System.out.println("表头信息:" + headMap);}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {System.out.println("表格读取完成!");}}

对以上代码进行解读,其中

  1. invoke()函数是进行一行行读取excel数据的函数,并且每行数据会被保存到 FaultInfoData 类中,然后将FaultInfoData转化成数据库对应的实体类 FaultInfo ,使用mybatis进行保存数据。
  2. invokeHeadMap()函数能够打印输出表头
  3. doAfterAllAnalysed()函数是表格读取后进行的操作
  4. FaultInfoService是进行服务操作的,由于没有在spring容器中进行注册,所以要通过传递参数的形式传递过来。

4、导入excel的服务操作

 @Overridepublic void saveFaultInfos(MultipartFile file, FaultInfoService faultInfoService, int treeNodeId) {try {//文件输入流InputStream is = file.getInputStream();//调用方法进行读取EasyExcel.read(is, FaultInfoData.class, new FaultExcelListener(faultInfoService, treeNodeId)).sheet().doRead();} catch (Exception e) {e.printStackTrace();throw new SelfDefinitionException(20001, "导入故障信息excel失败,添加失败");}}

5、得到结果,保存数据到数据库

访问controller的链接地址,进行服务调用,将数据保存到数据库,数据库表结果如下图:

以上是读取excel保存到数据库的操作

6、读取数据库数据写入excel

 @ApiOperation(value = "选择一个路径,将当前的列表导出到excel")@GetMapping("/xxxxx/{treeNodeId}")public R xxxxx(@ApiParam(name = "treeNodeId", value = "当前树节点id", required = true) @PathVariable Integer treeNodeId) {SysTree treeNode = sysTreeService.getById(treeNodeId);String treeNodeName = treeNode.getNodeName();String fileName = treeNodeName + "_故障信息.xlsx";List<FaultInfo> list = faultInfoService.list(new QueryWrapper<FaultInfo>().eq("sys_tree_id", treeNodeId));//将FaultInfo类型转化成FaultInfoData类型List<FaultInfoData> faultInfoDataList = list.stream().map(info -> {FaultInfoData faultInfoData = new FaultInfoData();BeanUtils.copyProperties(info, faultInfoData);return faultInfoData;}).collect(Collectors.toList());EasyExcel.write(fileName, FaultInfoData.class).sheet(treeNodeName).doWrite(faultInfoDataList);return R.ok();}

7、总结

以上就是使用第三方插件easyexcel读取excel,写入excel的过程,本来想的挺清晰的,结果写着写着就有点乱了,不知道你们能不能看懂,通过绑定实体类的方式读取写入操作是比较简单的,仔细看看应该能够读懂,嘻嘻嘻!

学习之所以会想睡觉,是因为那是梦开始的地方。
ଘ(੭ˊᵕˋ)੭ (开心) ଘ(੭ˊᵕˋ)੭ (开心)ଘ(੭ˊᵕˋ)੭ (开心)ଘ(੭ˊᵕˋ)੭ (开心)ଘ(੭ˊᵕˋ)੭ (开心)
                                                                                                         ------不写代码不会凸的小刘

(一)EasyExcel的使用(读取数据到实体类即绑定实体类)相关推荐

  1. (二)Easyexcel 的使用(读取数据到map集合中)

    前面讲述了使用实体类的方式绑定excel表头的方式进行读取和写入操作,是比较简单的,那么由于表头可能会变,那么就不能使用绑定实体类的方式进行了,于是搜索百度一番,借鉴别人的博客,使用map集合的方式进 ...

  2. 使用EasyExcel将本地excel数据读取后导入mysql数据库中

    本篇文章只记录EasyExcel的读(read) 一. EasyExcel 是做什么的? 首先看下EasyExcel解释: EasyExcel是阿里巴巴开源的一个excel处理框架,是一个基于Java ...

  3. 枚举中文转数字并easyexcel导入(读取Read)数据至数据库,用监听器解决导入关联多表的问题

    以下内容皆为本人学习过程中的所学的知识,全根据自己所学思路来写的. 大致流程如下: 一.创建实体类,注意有一个是导入的模板实体模型类(CustomManageAndCustomerInformatio ...

  4. EasyExcel快速上手~读取

    对象 // 如果没有特殊说明,下面的案例将默认使用这个实体类 public class DemoData {private String string;private Date date;privat ...

  5. EasyExcel的简单读取操作

    EasyExcel的简单读取操作 Java领域解析.生成Excel比较有名的框架有Apache poi. jxl等.但他们都存在一个严重的问题就是 非常的耗内存.如果你的系统并发量不大的话可能还行,但 ...

  6. EasyExcel 轻松灵活读取Excel内容

    写在前面 Java 后端程序员应该会遇到读取 Excel 信息到 DB 等相关需求,脑海中可能突然间想起 Apache POI 这个技术解决方案,但是当 Excel 的数据量非常大的时候,你也许发现, ...

  7. 阿里云EasyExcel读写excel表数据

    阿里云EasyExcel读取excel表数据 1.待读取的excel表test.xls 2.导入Maven依赖 <dependency><groupId>com.alibaba ...

  8. 使用easyExcel批量导入导出数据

    excel在工作中比较常用了,对于需要批量导入的需求,一般都是使用excel.excel导入常用poi,但是POI使用繁琐,而且对内存消耗大,这篇文章就是使用easyexcel来解析数据 场景一:将数 ...

  9. easyExcel导出和读取

    easyExcel导出和读取 读取(导入) 导包 <dependency><groupId>com.alibaba</groupId><artifactId& ...

最新文章

  1. 吴恩达Drive.ai因经营困难“卖身”苹果
  2. 在Google Maps 上点击标签后显示说明
  3. Spring5.0(2)--- Framework 5 FAQ
  4. html5白话解释,HTML5这个词到底是什么意思?
  5. 酒店房间登记与计费管理系统《c语言课程设计》 文库,C语言课程设计--酒店房间登记与计费管理系统程序代码...
  6. python数字转字符串固定位数_python-将String转换为64位整数映射字符以自定...
  7. oracle shutdown 默认,oracle shutdown 没有反应
  8. 和opengl的关系_从零开始的图形学学习(零):一切的开始 —— 自建OpenGL开发框架...
  9. 海洋地球物理探测方法综述(二)
  10. 揭开MySQL数据库的神秘面纱!
  11. Jetson nano (4GB B01) 系统安装,官方Demo测试 (目标检测、手势识别)
  12. 【转载】定位系统中的多径效应
  13. XUPT第三届新生算法赛
  14. ubuntu18.04同时使用多个有线网络和无线网络时如何设置优先级
  15. 有关WLAN与wifi、WPAN与Bluetooth、WPAN与802.15、wifi与802.11、WiMAX与802.16等关系的一点理解
  16. Mbatis-Plus整合springboot详细学习笔记
  17. 种草问题java_关于KOL种草营销常见问题 我来为你解答
  18. DataV轮播表组件dv-scroll-board宽度问题
  19. Python写入Excel格式和颜色
  20. 蓝桥杯倒计时 | 倒计时10天

热门文章

  1. html显示多张照片的布局,多图片如何排版?手把手教你多图排版布局
  2. 排查定时任务为什么不执行
  3. 从异常堆栈中还原 ProGuard 混淆过的代码
  4. 公司人才中介平台的设计与实现
  5. Java毕设项目-OA办公系统
  6. 艾司博讯:拼多多新手如何正确使用多多进宝?
  7. CH340和PL2303安装(带链接)
  8. 如何将npm升级到最新版本
  9. 未来生活进行时: 互联网”进化论”——达尔文与人工智能的故事?!
  10. 人工智能入门学习笔记(一)