当前位置: 首页 > 后端技术 > Java

SpringBoot+EasyExcel导入导出,好用,丢掉POI!

时间:2023-04-02 02:00:57 Java

来源:https://www.jianshu.com/p/4e6...1.EasyExcelEasyExcel是阿里巴巴开源的poi插件之一。大的时候容易OOM,解决了POI并发导致的错误。主要解决方案:通过解压文件加载,逐行加载,丢弃样式、字体等不重要的数据,减少内存占用。EasyExcel的优势在于注释式的自定义操作。输入输出简单,提供输入输出过程接口,支持单元格合并等一定程度的灵活操作。二、常用注解@ExcelProperty指定当前字段对应的excel中的列。您可以按名称或索引进行匹配。当然,你也可以留空。默认第一个字段是index=0,依此类推。注意,要么不全部写,要么全部用索引,要么全部用名字来匹配。三者不要混用,除非你非常清楚源码中如何对三者进行排序。@ExcelIgnore默认所有字段都会匹配excel,添加这个注解会忽略字段@DateTimeFormat的日期转换,使用String接收excel日期格式的数据会调用这个注解。里面的值是指java.text.SimpleDateFormat@NumberFormat数字转换,当使用String接收excel数字格式的数据时会调用这个注解。里面的值是指java.text.DecimalFormat@ExcelIgnoreUnannotated。默认情况下,没有ExcelProperty注解的会参与读写,不参与读写。>com.alibabaeasyexcel2.1.4javax.servletjavax.servlet-api4.0.1providedcom.alibabafastjson1.2.47SpringBoot的基础就不介绍了。我推荐这个实用教程:https://www.javastack.cn/cate...4。Listener/***EasyExcelimportmonitor*/publicclassExcelListenerextendsAnalysisEventListener{//可以通过实例获取值privateListdatas=newArrayList();@Overridepublicvoidinvoke(Objecto,AnalysisContextanalysisContext){datas.add(o);//数据存入列表,用于批处理或后续业务逻辑处理doSomething(o);//根据自己业务处理}privatevoiddoSomething(Objectobject){//1、存储调用接口}publicListgetDatas(){returndatas;}publicvoidsetDatas(Listdatas){this.datas=datas;}@OverridepublicvoiddoAfterAllAnalysed(AnalysisContextanalysisContext){//datas.clear();//分析结束时销毁未使用的资源}}5.接口导入Exceltry{//获取文件名Stringfilename=file.getOriginalFilename();//获取文件流InputStreaminputStream=file.getInputStream();//实例化实现AnalysisEventListener接口的类ExcelListenerlistener=newExcelListener();//引入参数ExcelReaderexcelReader=newExcelReader(inputStream,ExcelTypeEnum.XLS,null,listener);//读取信息excelReader.read(newSheet(1,0,Test.class));//获取数据Listlist=listener.getDatas();如果(list.size()>1){for(inti=0;itestList=newArrayList<>();尝试{字符串strUrl="C:\\Users\\Administrator\\Desktop\\json.xlsx";文件multipartFile=newFile(strUrl);InputStreaminputStream=newFileInputStream(multipartFile);//实例化实现AnalysisEventListener接口的类ExcelListener监听器=newExcelListener();//输入参数ExcelReaderexcelReader=newExcelReader(inputStream,ExcelTypeEnum.XLS,null,listener);//读取信息excelReader.read(newSheet(1,0,Test.class));//获取数据Listlist=listener.getDatas();if(list.size()>1){for(inti=0;i