JAVA操作Excel之阿里巴巴EasyExcel
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相关推荐
- Java操作excel(POI、EasyExcel)
Apache POI和EasyExcel学习 easyExcel easyExcel 官网地址:https://www.yuque.com/easyexcel/doc/easyexcel EasyEx ...
- Java操作Excel报表,EasyExcel用法大全
一:EasyExcel简介 1.EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. 2.Java解析.生成Excel比较有 ...
- Java操作Excel导入导出(EasyExcel)
在管理一个系统时,总会有许多的数据,为了方便浏览查看数据,系统总会提供「导出Excel」的功能:有导出就有导入,在要向数据库中插入大量的数据时,我们向程序提供准备好的 Excel,然后程序读取表格内容 ...
- Java操作Excel三种方式POI、Hutool、EasyExcel
Java操作Excel三种方式POI.Hutool.EasyExcel 1. Java操作Excel概述 1.1 Excel需求概述 1.2 Excel操作三种方式对比 2. ApachePOIExc ...
- java操作excel
使用Java操作excel可以使用两种方式: 关于表格导入导出,市面上比较知名的开源就是 Apache 的POI 和 阿里巴巴的 EasyExcel了.EasyExcel 也是对 POI 的改进和封装 ...
- java 操作excel的类_探究下Java操作Excel的几类工具
引言 java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI ...
- java excel读取操作,Java 操作 Excel (读取Excel2003 2007,Poi兑现)
Java 操作 Excel (读取Excel2003 2007,Poi实现) 一. Apache POI 简介( http://poi.apache.org/) 使用Java程序读写Microsoft ...
- java excel类库,jExcelApi Java 操作 Excel 的类库
jExcelApi Java 操作 Excel 的类库 Java Excel API(JXL)是一个成熟,开源的用来操作Excel电子表格的Java类库,支持读取,修改,写入等操作.这个项目基于GPL ...
- 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 ...
最新文章
- Eclipse+SVN搭建开发环境
- R语言使用pwr包的pwr.chisq.test函数对卡方检验进行效用分析(power analysis)、在已知效应量(effect size)、显著性水平、效用值的情况下计算需要的样本量
- python保留字-9.Python关键字(保留字)一览表
- 开发自己的区块链基础功能篇
- EditText: 自定义EditText 触摸时无法获取焦点
- 计算机课中初中一年级学生特点分析,初中信息技术说课稿:计算机的组成
- 【转】如何开始学习CoreCLR源代码?
- 笔记 | 《机器学习》中特征选择与稀疏学习
- 尝试一种新的生命状态
- php数据库单循环显示,php利用while单循环实现100行10列表格输出且每行颜色不一样...
- 数据结构与算法 —— 基础一(排列组合)
- boost使用log库编译报错
- apache下虚拟域名配置
- mysql in 临时表_什么时候会用到临时表?MySQL临时表的使用总结
- linux系统编程之进程(二):进程生命周期与PCB(进程控制块)
- 月薪2w的前端工程师,必盘的实战项目
- Questasim覆盖率数据分析
- css cursor用法
- UML需求分析步骤实例解析
- 质数 AcWing 868. 筛质数 线性筛