(一)EasyExcel的使用(读取数据到实体类即绑定实体类)
最近遇到了一个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("表格读取完成!");}}
对以上代码进行解读,其中
- invoke()函数是进行一行行读取excel数据的函数,并且每行数据会被保存到 FaultInfoData 类中,然后将FaultInfoData转化成数据库对应的实体类 FaultInfo ,使用mybatis进行保存数据。
- invokeHeadMap()函数能够打印输出表头
- doAfterAllAnalysed()函数是表格读取后进行的操作
- 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的使用(读取数据到实体类即绑定实体类)相关推荐
- (二)Easyexcel 的使用(读取数据到map集合中)
前面讲述了使用实体类的方式绑定excel表头的方式进行读取和写入操作,是比较简单的,那么由于表头可能会变,那么就不能使用绑定实体类的方式进行了,于是搜索百度一番,借鉴别人的博客,使用map集合的方式进 ...
- 使用EasyExcel将本地excel数据读取后导入mysql数据库中
本篇文章只记录EasyExcel的读(read) 一. EasyExcel 是做什么的? 首先看下EasyExcel解释: EasyExcel是阿里巴巴开源的一个excel处理框架,是一个基于Java ...
- 枚举中文转数字并easyexcel导入(读取Read)数据至数据库,用监听器解决导入关联多表的问题
以下内容皆为本人学习过程中的所学的知识,全根据自己所学思路来写的. 大致流程如下: 一.创建实体类,注意有一个是导入的模板实体模型类(CustomManageAndCustomerInformatio ...
- EasyExcel快速上手~读取
对象 // 如果没有特殊说明,下面的案例将默认使用这个实体类 public class DemoData {private String string;private Date date;privat ...
- EasyExcel的简单读取操作
EasyExcel的简单读取操作 Java领域解析.生成Excel比较有名的框架有Apache poi. jxl等.但他们都存在一个严重的问题就是 非常的耗内存.如果你的系统并发量不大的话可能还行,但 ...
- EasyExcel 轻松灵活读取Excel内容
写在前面 Java 后端程序员应该会遇到读取 Excel 信息到 DB 等相关需求,脑海中可能突然间想起 Apache POI 这个技术解决方案,但是当 Excel 的数据量非常大的时候,你也许发现, ...
- 阿里云EasyExcel读写excel表数据
阿里云EasyExcel读取excel表数据 1.待读取的excel表test.xls 2.导入Maven依赖 <dependency><groupId>com.alibaba ...
- 使用easyExcel批量导入导出数据
excel在工作中比较常用了,对于需要批量导入的需求,一般都是使用excel.excel导入常用poi,但是POI使用繁琐,而且对内存消耗大,这篇文章就是使用easyexcel来解析数据 场景一:将数 ...
- easyExcel导出和读取
easyExcel导出和读取 读取(导入) 导包 <dependency><groupId>com.alibaba</groupId><artifactId& ...
最新文章
- 吴恩达Drive.ai因经营困难“卖身”苹果
- 在Google Maps 上点击标签后显示说明
- Spring5.0(2)--- Framework 5 FAQ
- html5白话解释,HTML5这个词到底是什么意思?
- 酒店房间登记与计费管理系统《c语言课程设计》 文库,C语言课程设计--酒店房间登记与计费管理系统程序代码...
- python数字转字符串固定位数_python-将String转换为64位整数映射字符以自定...
- oracle shutdown 默认,oracle shutdown 没有反应
- 和opengl的关系_从零开始的图形学学习(零):一切的开始 —— 自建OpenGL开发框架...
- 海洋地球物理探测方法综述(二)
- 揭开MySQL数据库的神秘面纱!
- Jetson nano (4GB B01) 系统安装,官方Demo测试 (目标检测、手势识别)
- 【转载】定位系统中的多径效应
- XUPT第三届新生算法赛
- ubuntu18.04同时使用多个有线网络和无线网络时如何设置优先级
- 有关WLAN与wifi、WPAN与Bluetooth、WPAN与802.15、wifi与802.11、WiMAX与802.16等关系的一点理解
- Mbatis-Plus整合springboot详细学习笔记
- 种草问题java_关于KOL种草营销常见问题 我来为你解答
- DataV轮播表组件dv-scroll-board宽度问题
- Python写入Excel格式和颜色
- 蓝桥杯倒计时 | 倒计时10天