使用EasyExcel读写Excel文件

读取Excel还用POI?试试这款开源工具 写在前面Java 后端程序员应该会遇到读取 Excel 信息到 DB 等相关需求,脑海中可能突然间想起 Apache POI 这个技术解决方案,但是当 Excel 的数据... 阅读详情

笔者之前一直使用POI读写Excel文件,最近有个需求需要读取大概80万行数据的Excel,使用POI读取到10.2万行左右就卡死不动了,而且CPU占用直接拉满到100%,内存占用也很高。

查找资料后,发现POI提供了读取大量数据的方法,但是用起来比较复杂。同时看到有人提到用EasyExcel读取Excel的速度快,资源占用少。于是换成EasyExcel去读取那个80万行数据的Excel,发现读取速度确实很快,CPU和内存占用也很少。

然而EasyExcel的官方文档中,最简单的读写代码都是默认与数据库有交互,写了一些分页读写数据库的代码,还是不够简洁。所以个人参考EasyExcel的官方文档,写了一个更加简洁、清晰的,使用EasyExcel读取Excel的样例。


1.在pom.xml中添加POI相关依赖

        <!-- easyexcel -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel-core</artifactId>
            <version>3.3.2</version>
        </dependency>

2.实体类

package com.example.study.entity;


import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;

import java.util.Date;

@Getter
@Setter
public class StudentEntity {
    @ExcelProperty(value = "id", order = 1)
    private Integer id;

    @ExcelProperty(value = "生日", order = 4)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date birthday;

    @ExcelProperty(value = "名字", order = 2)
    private String name;

    @ExcelProperty(value = "性别", order = 3)
    private String sex;
}

3.读取Excel的类

package com.example.study.common;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.fastjson.JSON;
import com.example.study.entity.StudentEntity;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;

@Slf4j
public class EasyExcelDemo {
    public static void main(String[] args) {
        String readExcel = "F:\\tmp\\students.xlsx";
        String writeExcel = "F:\\tmp\\students-write.xlsx";
        List<StudentEntity> list = read(readExcel);
        write(writeExcel, list);
    }

    private static void write(String fileName, List<StudentEntity> list) {
        EasyExcel.write(fileName)
                .head(StudentEntity.class)
                .sheet("EasyExcel Writed 1")
                .doWrite(list);
    }


    private static List<StudentEntity> read(String excel) {
        List<StudentEntity> list = new ArrayList<>();
        EasyExcel.read(excel)
                .head(StudentEntity.class)
                .sheet(1)
                .registerReadListener(new ReadListener<StudentEntity>() {
                    @Override
                    public void invoke(StudentEntity entity, AnalysisContext analysisContext) {
                        list.add(entity);
                        System.out.println("每读取到一行数据就会执行该方法:" + JSON.toJSONString(entity));
                    }

                    @Override
                    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                        System.out.println("所有数据读取完成后执行该方法");
                    }
                }).doRead();
        return list;
    }
}
EasyExcel文件读取、生成excel、合并指定单元格 1、添加EasyExcel依赖 <!--alibaba easyexcel--> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.0-beta2</version> <!--1.1. 阅读详情

相关推荐

EasyExcel实现对excel文件读写

EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。......

冲出仁川,走出马德里,故事还会再继续 5828

EasyExcel轻松读取Excel文件!

EasyExcel是一个Java库,用于快速、简单地读写Excel文件。要使用EasyExcel,您首先需要将其添加为项目的依赖:一下几种方式读取文件。

qq_48607414的博客 2万+

CarPlay无线连接背后的‘握手’秘密:深入解读iAP2协议与蓝牙/Wi-Fi协同

本文深入解析了CarPlay无线连接背后的技术细节,重点探讨了iAP2协议与蓝牙/Wi-Fi的协同工作原理。从蓝牙层的UUID识别到iAP2协议的握手过程,再到Wi-Fi热点的建立与优化,详细揭示了CarPlay无线连接的安全机制和调试方法,为开发者提供了实用的技术参考。

weixin_42520573的博客 475

EasyExcel读取Excel数据(含多种方式)

简单地说,EasyExce是一个Java库,用于快速、简单地读写Excel文件以下是官网的简介:Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。

m0_59084856的博客 3万+

深入解析GEM5 McPAT NoC功耗模型:从arbiter电容计算到微架构关联

本文深入解析GEM5 McPAT NoC功耗模型,重点探讨arbiter电容计算与微架构的关联。通过拆解动态功耗公式和四类电容的物理本质,揭示能量与功率的转换关系,并提供参数调试和模型精度优化的实战技巧,帮助开发者更准确地预测和优化NoC功耗。

weixin_29305313的博客 203

oracle两节点RAC,由于gipc导致某节点crs无法启动问题分析

两节点RAC,其中1 节点集群CRS无法启动。经过分析原因为2节点gipcd进程异常,导致节点之间无法正常通信,重启2节点gipcd.bin后问题得以恢复。 从现象来看,是 ora.crsd...

cuibaye0692的博客 4536

Java使用EasyExcel实现对excel文件的读写

Java使用EasyExcel实现对excel文件的读写

lfyyyyy的博客 2644

JAVA审批流程,一个简单表结构设计方案By OU

一、表结构设计1.流程表(process)用于存储审批流程的基本信息。字段名类型描述idBIGINT主键,流程IDname流程名称TEXT流程描述DATETIME创建时间DATETIME更新时间statusTINYINT(1)流程状态(0: 停用, 1: 启用)2.节点表(process_node)用于管理流程中的每个审批节点。字段名类型描述idBIGINT主键,节点IDprocess_idBIGINT流程ID,外键关联process.id。

1901

使用阿里 EasyExcel 读写 Excel 文件

首先 pom.xml 引入依赖,EasyExcel 版本更新快,不同版本 API 均有不同,有些已经废弃。 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.0.0</version...

Allen_jinjie 的技术空间 2995

YOLO26核心模块解析:SimSPPF轻量化空间金字塔池化的原理与优势详解

SimConv作为现代深度学习的基础构建块,其设计虽然简洁,但包含了多项关键技术的有机组合。通过将卷积、批量归一化和激活函数整合为统一模块,SimConv不仅提供了稳定的训练特性和良好的表达能力,还为后续更复杂网络架构的发展奠定了基础。SimConv的成功在于其体现了深度学习设计的核心理念:简洁性与有效性的平衡。它证明了通过合理的技术组合,可以在不显著增加复杂度的前提下大幅提升模型性能。随着深度学习技术的持续发展,SimConv及其变种将继续作为重要的基础组件,推动计算机视觉和人工智能技术的进步。

know_F0727的博客 2619

基于双向GRU LSTM DNN水电站水文数据的每日径流量预测 完整代码+数据 可直接运行

基于双向GRU LSTM DNN水电站水文数据的每日径流量预测 完整代码+数据 可直接运行

1903

Java使用EasyExcel读写excel文件

介绍 对于easyExcel的具体介绍可到EasyExcel官网查看。 具体内容是: Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到几M,

ConradChe的博客 895

手把手教你学GPU的KMD专栏--3.4 中断处理机制与优化

记住,中断处理是GPU与CPU通信的"桥梁",没有高效的中断处理,GPU的性能将无法充分发挥。KMD通过"快进快出"原则、事件标志机制、GPU本机围栏等技术,实现高效、低延迟的中断处理。:GPU本机围栏机制允许GPU在满足特定条件(如围栏值达到某个阈值)时才触发中断,而不是每次围栏更新都触发中断,从而显著减少CPU唤醒次数,降低功耗。正如Microsoft GPU架构师在2022年WinHEC大会上指出:"没有好的中断处理,再强大的GPU也会被系统延迟拖垮。:多个GPU设备共享中断,导致中断处理混乱。

MHD0815的博客 112

easyexcel读写excel文件中的信息

<!--读取excel文件 对应 poi 3.17 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.1</version> </dependenc...

weixin_42232623的博客 370

低功耗设计:如何计算power switch的数量?

power switch加多了漏电高,加少了ir drop会有问题,具体加多少合适要如何计算呢?这里可以给一个参考方式。 第一步,先选switch cell的类型 通常选用HVT类型的switch cell,优点是漏电更低,缺点也很明显,电阻大,压降也大,switch cell的大小选择,可以选择(开启电阻x面积)最小的switch cell,即单位面积提供最小并联电阻的cell类型。 第二步,计算数量 选好类型,确定了开启电阻,可以按照如下公式计算数量: Ron/Xnum • W/V = V•P

m0_61544122的博客 3578

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Spring Boot 中集成 EasyExcel 实现 Excel 文件读写操作

Spring Boot 中集成 EasyExcel 实现 Excel 文件读写操作

乐于分享,共同成长 825

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java读写txt文件,easyExcel读写excel文件

Java读写txt文件、excel文件

dont_curry的博客 436

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

使用springboot整合EasyExcel对excel类型的文件进行读写操作

使用EasyExcel可以可以实现对表格数据的读取和写入,十分的好用,操作也十分的简单。

smilehjl 1637

SpringBoot整合EasyExcel实现excel文件读写

SpringBoot整合EasyExcel实现excel文件读写

weixin_45734473的博客 539

EasyExcel读写Excel文件

EasyExcel使用简介为什么使用EaysExcel:示例使用步骤 为什么使用EaysExcel: 简洁且不会造成内存泄漏 示例 @Test public void test2(){ //读取文件 //创建ExcelReaderBuilder实例 ExcelReaderBuilder readerBuilder = EasyExcel.read(); //获取文件对象 readerBuilder.file("D

weixin_44762610的博客 1641

java使用EasyExcel读写及校验Excel文件

EasyExcel是阿里巴巴开源的 Excel 读取框架,其最大的特点是极低的内存消耗和极高的文件读取速度。在本文中使用 EasyExcel,实现了读取 Excel 文件并对文件表头进行校验写入 Excel文件并根据写入内容自适应调整单元格宽高。EasyExcel官方文档。

♥公众号♥:打代码的苏比特 6697

java如何实现读写excel文件---EasyExcel

目录一、创建项目,实现EasyExcel对Excel写操作1、创建一个普通的maven项目2、pom中引入xml相关依赖 3、创建实体类4 、实现写操作二、实现EasyExcel对Excel读操作1、创建实体类2、创建读取操作的监听器 3、调用实现最终的读取一、创建项目,实现EasyExcel对Excel写操作1、创建一个普通的maven项目项目...

java_zdc的博客 716

Alibaba开源工具EasyExcel读写Excel文件

使用EasyExcel读写Excel文件

weixin_42274846的博客 2573
上一篇: Excel文件导入&导出工具类
下一篇: Java执行Python代码的两种方法(Jython与ProcessBuilder)
java_t_t
博客等级 码龄9年 171粉丝 107原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值