1.Read&Write-Easy Excel
2.Spring Boot + EasyExcel导入导出,码分简直太好用了!码分
3.如何解决easyexcel依赖错误?码分
4.有哪些办法在easyexcel中自定义单元格的样式和格式?
5.EasyExcel不愧是最好用的的Excel导入导出工具,性能爆表!码分用起来真优雅!码分
6.EasyExcel设置单元格样式及批注&隐藏行
Read&Write-Easy Excel
在处理大量数据导入Excel时,码分springboot指令源码传统方法POI可能会出现内存溢出问题。码分这时,码分EasyExcel成为了解决方案。码分它基于SAX(Simple Api for Xml)事件驱动模型,码分通过解析XML的码分方式高效处理Excel文件。
要了解EasyExcel的码分读取功能,首先需要查看其源码。码分通过Easy Excel工厂创建ExcelReaderBuilder对象。码分
ExcelReaderBuilder的码分构造方法中生成了ReadWorkbook对象。
Head用于存放接收实体数据。
在1.8版本之后,readLister可以直接使用PageReadListener。
接下来,我们关注pageReadListener。其中包含一个final修饰的consumer,该consumer具有accept方法。设定batch_count为,当读取的数据量超过时,将直接进行消费,避免所有数据一次性加载到内存中,从而防止内存溢出。
在doRead()方法中,使用excel分析器分析Excel的sheet。
分析完成后,调用executor方法,通过xlsx分析器分析我们的Excel文件。
Excel写入操作与读取类似,根据补码求源码需要创建WriteWorkbook对象,然后运行doWrite()方法。此时,可以通过注解指定Excel的列进行写入。
Spring Boot + EasyExcel导入导出,简直太好用了!
老项目主要采用的POI框架来进行Excel数据的导入和导出,但经常会出现OOM的情况,导致整个服务不可用。后续逐步转移到EasyExcel,简直不能太好用了。
EasyExcel是阿里巴巴开源插件之一,主要解决了poi框架使用复杂,sax解析模式不容易操作,数据量大起来容易OOM,解决了POI并发造成的报错。主要解决方式:通过解压文件的方式加载,一行一行地加载,并且抛弃样式字体等不重要的数据,降低内存的占用。
在之前专门写过一篇文章《EasyExcel太方便易用了,强烈推荐!》,介绍EasyExcel功能的基本使用。今天这篇文章,我们基于SpringBoot来实现一下EasyExcel的集成,更加方便大家在实践中的直接使用。
创建一个基础的SpringBoot项目,比如这里采用SpringBoot 2.7.2版本。
EasyExcel在SpringBoot的集成非常方便,只需引入对应的pom依赖即可。在上述dependencies中添加EasyExcel的源码包管理系统依赖:
EasyExcel目前稳定最新版本2.2.。如果想查看开源项目或最新版本,可在GitHub上获得:github.com/alibaba/easy...
为了方便和简化代码编写,这里同时引入了Lombok的依赖,后续代码中也会使用对应的注解。
下面正式开始业务相关代码的编写。如果你想直接获得完整源码,对照源码阅读本篇文章,可在公号「程序新视界」内回“”获得完整源码。
这里创建一个Member,会员的实体类,并在实体类中填写基础的个人信息。
为了尽量多的演示EasyExcel的相关功能,在上述实体类中使用了其常见的一些注解:
GenderConverter转换器的代码实现如下:
不同版本中,convertToJavaData和convertToExcelData的方法参数有所不同,对应的值的获取方式也不同,大家在使用时注意对照自己的版本即可。
为方便验证功能,DAO层的逻辑便不再实现,直接通过Service层来封装数据,先来看导出功能的业务类实现。
定义MemberService接口:
定义MemberServiceImpl实现类:
其中数据采用模拟的静态数据,返回Member列表。
在Controller层的实现一个简单的导出实现:
这个实现方式非常简单直接,使用EasyExcel的write方法将查询到的数据进行处理,以流的形式写出即可。
在浏览器访问对应的链接,可下载到如下Excel内容:
如果我们需要将导出的Excel进行一些格式化的处理,这就需要用到导出策略的实现了。
在EasyExcel执行write方法之后,获得ExcelWriterBuilder类,通过该类的registerWriteHandler方法可以设置一些处理策略。
这里先实现一个通用的2021推荐系统源码格式策略工具类CommonCellStyleStrategy:
该类中示例设置了Excel的基础格式。
再来实现一个精细化控制单元格内容CellWriteHandler的实现类:
在这里,对单元格表头的第0个Cell设置了一个超链接。
通过上面的定义两个策略实现,在导出Excel可以使用上述两个策略实现:
通过浏览器,访问上述接口,导出的Excel格式如下:
可以看出,导出的Excel已经附带了具体的格式。其中表头“用户名”上也携带了对应的超链接。其他更精细化的控制,大家可以在策略类中做进一步的控制。
所谓的同步获取结果导入,就是执行导入操作时,将导入内容解析封装成一个结果列表返回给业务,业务代码再对列表中的数据进行集中的处理。
先来看同步导入的实现方式。
注意,在上述代码中,最终调用的是doReadSync()方法。
这里直接用PostMan进行相应的文件上传请求:
执行导入请求,会发现控制台打印出对应的解析对象:
说明上传成功,并且解析成功。
上面示例中是基于同步获取结果列表的形式进行导入,还有一种实现方式是基于监听器的形式来实现。这种形式可以达到边解析边处理业务逻辑的效果。
定义Listener:
在MemberExcelListener中可以针对每条数据进行对应的业务逻辑处理。
对外接口实现如下:
这里采用了doRead()方法进行读取操作。在PostMan中再次上传Excel,打印日志如下:
说明解析成功,并且在解析的过程中,进行了业务逻辑的处理。
本篇文章基于SpringBoot集成EasyExcel的实现展开,为大家讲解了EasyExcel在实践中的一加6源码具体运用。大家可根据需要,进行变通处理。同时,基于自定义转换器、自定义策略、自定义监听器等形式达到灵活适用于各种场景。希望本篇文章能给大家带来帮助。
博主简介:《SpringBoot技术内幕》技术图书作者,酷爱钻研技术,写技术干货文章。 公众号:「程序新视界」,博主的公众号,欢迎关注~ 技术交流:请联系博主微信号:zhuan2quan
如何解决easyexcel依赖错误?
在实际开发过程中,我们可能会遇到EasyExcel依赖错误的问题。为解决此问题,让我们深入探讨易上手且节省内存的Excel操作框架:EasyExcel。该框架相较于Apache POI,提供更佳的用户体验和较低的内存消耗。
使用EasyExcel能有效避免在处理大量数据时出现OOM(内存溢出)错误,显著节省内存开销。据官方数据,使用EasyExcel读取MB内存的Excel文件仅需1分钟,即可完成MB(,行、列)数据的读取,效率显著提升。
易Excel提供丰富的API,其中写操作尤为重要。在写入数据时,无需再受限于类中属性的顺序和名称,可自定义表头信息。实现这一功能,需先修改POJO类,调整属性与表头的对应关系。通过调整属性的值(如order),可以控制表头在Excel中的列顺序,实现更灵活的数据布局。
写文件操作时,使用EasyExcel.write方法构建Excel写对象,参数包括目标文件名、工作表名称以及需要写入的数据。通过源码分析,我们可以发现多种构建方式,具体选择取决于实际需求。例如,使用`EasyExcel.writerSheet("汇总")`指定工作表名称,再通过doWrite方法传入数据集合,完成数据写入。
在实际应用中,有时并非所有属性数据都需写入Excel。此时,可以利用`@ExcelIgnore`注解标记需要忽略的属性,简化数据处理流程。
读取操作同样高效。通过`EasyExcel.read`方法创建ExcelReaderBuilder对象,实现Excel文档的解析。读取方法需传入sheet序号、数据处理方法以及数据类型等参数。例如,读取指定工作表数据,需调用`sheet`方法指定工作表序号,进而执行数据读取任务。
易Excel提供的API使Excel操作更加灵活、高效。通过合理利用其功能,开发人员可显著提升工作效率,减少内存消耗。尽管本文未详细展开源码分析,但易Excel源码的开放性和文档的详尽性,使得开发者能够轻松上手并实现复杂的数据操作需求。
有哪些办法在easyexcel中自定义单元格的样式和格式?
在EasyExcel中自定义单元格样式和格式,可通过定义特定的拦截器实现。此功能不仅简化了操作流程,还能提供丰富的个性化定制选项。首先,需要创建一个继承自AbstractMergeStrategy的自定义类,以此实现CellWriteHandler接口。接下来,重写merge方法,以此获取当前单元格内容,判断并进行合并操作。
在merge方法中,通过cell.getStringCellValue()获取单元格内容,进而判断是否为所需合并的目标单元格。获取当前工作表的最后行数,使用CellRangeAddress进行单元格合并。通过源码理解合并规则(通过int参数表示行和列范围),以此实现单元格合并功能。
然而,合并单元格操作中可能遇到一个问题:可能需要处理非字符串类型的单元格。因此,在合并操作前,进行一次针对性的单元格类型检查,以避免不必要的错误。
针对全局配置的表框线条,若需排除当前单元格,可通过定义CustomCellWriteHandler拦截器,继承自AbstractCellWriteHandler。在afterCellDispose方法中,对单元格进行特定操作,如移除线条设置。这样,在写入数据时,只需将拦截器置于流程中,实现单元格样式的灵活定制。
通过上述步骤,合并单元格与调整单元格格式变得简便且高效。在Controller层中,根据具体需求对表格表头进行设置,实现与对应字段的匹配,以达到精准的自定义效果。
EasyExcel不愧是最好用的的Excel导入导出工具,性能爆表!用起来真优雅!
操作Excel实现导入导出是个常见需求,一款高性能的工具对于提升效率至关重要。今天推荐一款名叫EasyExcel的工具,由阿里开源,以其快速的处理速度、低内存占用和便捷的使用方式著称,在GitHub上已获k+Star。
EasyExcel处理大型数据时表现出色,读取MB(万行列)的Excel,仅需MB内存,并且在秒内完成,极速模式下效率更高。在SpringBoot项目中集成EasyExcel非常简单,只需添加依赖。
使用EasyExcel时,通过注解实现数据的导入导出,操作与EasyPoi相似。以会员信息和订单信息为例,将展示如何实现简单和复杂数据的导出。
以会员信息导出为例,体验EasyExcel的导出功能。接着,通过会员信息的导入,展示EasyExcel的导入能力。复杂导出部分,以会员与订单的嵌套数据为例,演示EasyExcel如何处理一对多关系。
在实现一对多信息导出时,由于EasyExcel不直接支持,可采用自定义单元格合并策略的解决方案。从开源项目的issues中查找相关方案,通过创建自定义合并策略实现嵌套数据的合并导出。
理解将嵌套数据平铺、不进行合并导出的Excel样例后,明白自定义单元格合并策略的实现思路,即合并订单ID相同的列中需要合并的列,从而实现一对多嵌套信息的导出。
对于更深入的使用,建议参考EasyExcel的官方文档和官方Demo。总结而言,EasyExcel在数据量不大时使用方便,性能优秀,但对于一对多导出需求可能较为复杂,不如EasyPoi强大。
如有需要,可查阅项目源码和官方文档获取更多信息。
EasyExcel设置单元格样式及批注&隐藏行
下面是model类,我们写入excel的头部信息可以通过注解进行设置。在之前的easyExcel中是需要继承com.alibaba.excel.metadata.BaseRowModel的,不过这个类已经废弃了。所以新版本的话就不在需要了。
就是这样了。具体的例子可以参考github上的源码。 /xchaset/example
项目实战SpringBoot+Vue基于easyexcel实现Excel大数据量的导入导出(包含数据脱敏)--简单易上手
项目实战SpringBoot+Vue通过EasyExcel实现Excel大数据量的高效导入导出,轻松应对数据脱敏需求。 实战过程中,我们展示了以下关键环节: 导入数据:通过多种方式实现,包括简单方法、匿名内部类、自定义ReadListener等,每种方法都适合不同场景的需求。 导出Excel:同样提供多种写法,简单导出和多Sheet页导出,满足不同导出需求。 脱敏处理部分,我们使用了SensitivityEncrypt注解、SensitivitySerializer和SensitivityUtil工具类,确保数据在传输过程中的安全性。 在实际应用中,我们展示了完整的数据导入和导出流程,以及前端页面的配合。遇到数据解析问题时,提供了详细的解决方案。 项目的源码可以在这里找到:[项目源码链接] 感谢EasyExcel团队的详细文档支持,您的支持将继续推动我们不断进步。请随时分享您的使用体验,共同进步。