EasyExcel

JAVA解析Excel工具
POI非常耗内存,会出现内存溢出
以下是EasyExcel和POI解析Excel的对比图

导入依赖

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.3</version>
</dependency>

EasyExcel - 写

1、DemoData类

public class DemoData {@ExcelProperty("字符串标题")private String string;@ExcelProperty("日期标题")private Date date;@ExcelProperty("数字标题")private Double doubleData;// 忽略@ExcelIgnoreprivate String ignore;
}

2、写入excel代码

private static List<DemoData> data(){ArrayList<DemoData> list = new ArrayList<DemoData>();for(int i=0;i<10;i++) {DemoData data = new DemoData();data.setString("字符串"+i);data.setDate(new Date());data.setDoubleData(0.56);list.add(data);}return list;}//根据list写入excelpublic static void simpleWrite() {//写法1String PATH = "D:\\Study\\Back-end\\";String fileName = PATH + "EasyTest.xlsx";//需要指定写用哪个class去写,然后写到第一个sheet,名字为模板,然后文件流会自动关闭//write(fileName,格式类)//sheet(表名)//doWrite(数据)EasyExcel.write(fileName,DemoData.class).sheet("模板").doWrite(data());System.out.println("over");}

执行结果如下:

EasyExcel - 读

1、DemoDataListener类

import java.util.ArrayList;
import java.util.List;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson2.JSON;// 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
public class DemoDataListener extends AnalysisEventListener<DemoData> {private static final Logger LOGGER = LoggerFactory.getLogger(DemoDataListener.class);/*** 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收*/private static final int BATCH_COUNT = 5;List<DemoData> list = new ArrayList<>();private DemoDAO demoDAO;public DemoDataListener() {// 这里是demo,所以随便new一个。实际使用如果到了spring,请使用下面的有参构造函数demoDAO = new DemoDAO();}//读取数据会执行invoke方法//DemoData 类型//AnalysisContext 分析上下文@Overridepublic void invoke(DemoData data, AnalysisContext context) {System.out.println(JSON.toJSONString(data));list.add(data);// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOMif (list.size() >= BATCH_COUNT) {saveData();// 存储完成清理 listlist.clear();}}/*** 所有数据解析完成了 都会来调用** @param context*/@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {// 这里也要保存数据,确保最后遗留的数据也存储到数据库saveData();LOGGER.info("所有数据解析完成!");}/*** 加上存储数据库*/private void saveData() {LOGGER.info("{}条数据,开始存储数据库!", list.size());demoDAO.save(list);LOGGER.info("存储数据库成功!");}
}

2、DemoDAO类

import java.util.List;public class DemoDAO {public void save(List<DemoData> list) {// 如果是mybatis,尽量别直接调用多次insert,自己写一个mapper里面新增一个方法batchInsert,所有数据一次性插入}
}

3、读取excel

//读取excelpublic static void simpleRead() {String PATH = "D:\\Study\\Back-end\\";String fileName = PATH+"EasyTest.xlsx";// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭// DemoDataListener 监听器// 重点注意读取的逻辑EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();}

执行结果如下:

{"date":"2022-12-01 23:00:31.295","doubleData":0.56,"string":"字符串0"}
{"date":"2022-12-01 23:00:31.295","doubleData":0.56,"string":"字符串1"}
{"date":"2022-12-01 23:00:31.295","doubleData":0.56,"string":"字符串2"}
{"date":"2022-12-01 23:00:31.295","doubleData":0.56,"string":"字符串3"}
{"date":"2022-12-01 23:00:31.295","doubleData":0.56,"string":"字符串4"}
23:00:31.761 [main] INFO com.ruoyi.common.core.controller.easy.DemoDataListener - 5条数据,开始存储数据库!
23:00:31.761 [main] INFO com.ruoyi.common.core.controller.easy.DemoDataListener - 存储数据库成功!
{"date":"2022-12-01 23:00:31.295","doubleData":0.56,"string":"字符串5"}
{"date":"2022-12-01 23:00:31.295","doubleData":0.56,"string":"字符串6"}
{"date":"2022-12-01 23:00:31.295","doubleData":0.56,"string":"字符串7"}
{"date":"2022-12-01 23:00:31.295","doubleData":0.56,"string":"字符串8"}
{"date":"2022-12-01 23:00:31.295","doubleData":0.56,"string":"字符串9"}
23:00:31.763 [main] INFO com.ruoyi.common.core.controller.easy.DemoDataListener - 5条数据,开始存储数据库!
23:00:31.763 [main] INFO com.ruoyi.common.core.controller.easy.DemoDataListener - 存储数据库成功!
23:00:31.763 [main] INFO com.ruoyi.common.core.controller.easy.DemoDataListener - 0条数据,开始存储数据库!
23:00:31.763 [main] INFO com.ruoyi.common.core.controller.easy.DemoDataListener - 存储数据库成功!
23:00:31.763 [main] INFO com.ruoyi.common.core.controller.easy.DemoDataListener - 所有数据解析完成!

JAVA操作Excel之阿里巴巴EasyExcel相关推荐

  1. Java操作excel(POI、EasyExcel)

    Apache POI和EasyExcel学习 easyExcel easyExcel 官网地址:https://www.yuque.com/easyexcel/doc/easyexcel EasyEx ...

  2. Java操作Excel报表,EasyExcel用法大全

    一:EasyExcel简介 1.EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. 2.Java解析.生成Excel比较有 ...

  3. Java操作Excel导入导出(EasyExcel)

    在管理一个系统时,总会有许多的数据,为了方便浏览查看数据,系统总会提供「导出Excel」的功能:有导出就有导入,在要向数据库中插入大量的数据时,我们向程序提供准备好的 Excel,然后程序读取表格内容 ...

  4. Java操作Excel三种方式POI、Hutool、EasyExcel

    Java操作Excel三种方式POI.Hutool.EasyExcel 1. Java操作Excel概述 1.1 Excel需求概述 1.2 Excel操作三种方式对比 2. ApachePOIExc ...

  5. java操作excel

    使用Java操作excel可以使用两种方式: 关于表格导入导出,市面上比较知名的开源就是 Apache 的POI 和 阿里巴巴的 EasyExcel了.EasyExcel 也是对 POI 的改进和封装 ...

  6. java 操作excel的类_探究下Java操作Excel的几类工具

    引言 java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI ...

  7. java excel读取操作,Java 操作 Excel (读取Excel2003 2007,Poi兑现)

    Java 操作 Excel (读取Excel2003 2007,Poi实现) 一. Apache POI 简介( http://poi.apache.org/) 使用Java程序读写Microsoft ...

  8. java excel类库,jExcelApi Java 操作 Excel 的类库

    jExcelApi Java 操作 Excel 的类库 Java Excel API(JXL)是一个成熟,开源的用来操作Excel电子表格的Java类库,支持读取,修改,写入等操作.这个项目基于GPL ...

  9. java excel api 下载文件_Java-Excel Java操作Excel POI(Jakarta POI API) - 下载 - 搜珍网

    Java操作Excel/Jakarta POI API/data/Jakarta POI API.doc Java操作Excel/Jakarta POI API/jar/poi-3.0.2-FINAL ...

最新文章

  1. Eclipse+SVN搭建开发环境
  2. R语言使用pwr包的pwr.chisq.test函数对卡方检验进行效用分析(power analysis)、在已知效应量(effect size)、显著性水平、效用值的情况下计算需要的样本量
  3. python保留字-9.Python关键字(保留字)一览表
  4. 开发自己的区块链基础功能篇
  5. EditText: 自定义EditText 触摸时无法获取焦点
  6. 计算机课中初中一年级学生特点分析,初中信息技术说课稿:计算机的组成
  7. 【转】如何开始学习CoreCLR源代码?
  8. 笔记 | 《机器学习》中特征选择与稀疏学习
  9. 尝试一种新的生命状态
  10. php数据库单循环显示,php利用while单循环实现100行10列表格输出且每行颜色不一样...
  11. 数据结构与算法 —— 基础一(排列组合)
  12. boost使用log库编译报错
  13. apache下虚拟域名配置
  14. mysql in 临时表_什么时候会用到临时表?MySQL临时表的使用总结
  15. linux系统编程之进程(二):进程生命周期与PCB(进程控制块)
  16. 月薪2w的前端工程师,必盘的实战项目
  17. Questasim覆盖率数据分析
  18. css cursor用法
  19. UML需求分析步骤实例解析
  20. 质数 AcWing 868. 筛质数 线性筛

热门文章

  1. adb如何连接mumu模拟器并修改Android ID
  2. 【论文阅读】Swin Transformer Embedding UNet用于遥感图像语义分割
  3. C语言(一) str函数
  4. [日推荐]『初次见』这里有故事,还有诗和远方!
  5. 前端请求数据GET方法
  6. Neo4j如何删除标签
  7. Bcompare.exe应用程序发生错误
  8. 怎样解决虚拟内存不足问题
  9. MT 300 Foreign Exchange Confirmation外汇交易确认书
  10. JAVA程序中ACCESS 数据库使用