【EasyExcel】Excel操作(九):Excel读取写入一条龙

10 篇文章 11 订阅
订阅专栏
如果你想和别人制造牵绊,就要承受流泪的风险。

简单介绍

在之前的excel系列博客 [点击进入] 中给大家带来了Apace POI对excel的操作,今天给大家带来顾名思义炒鸡简单的EasyExcel对excel的操作!!!

那么什么是EasyExcel呢?我们来到它的github地址: https://github.com/alibaba/easyexcel,发现:
在这里插入图片描述
或者我们来到它的官方文档: https://www.yuque.com/easyexcel/doc/easyexcel
在这里插入图片描述
再点击 关于EasyExcel :
在这里插入图片描述
我们就会发现:其实EasyExcel底层就是我们之前讲的Apache POI,但是又有着一些不同

至于更多精彩内容,大家可以自行通过以上我提供的EasyExcel的GitHub和文档地址去发掘。下面,我们就进入实战吧,让大家能够快速上手!!!

快速上手

所需依赖

		<!-- web的起步依赖 -->
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>
		<!-- EasyExcel的依赖 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.6</version>
        </dependency>
        <!-- 测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

所需实体类

EasyExcel是直接基于实体类读写的,使用它提供的注解即可,再也不用像以前POI那样麻烦了:

package start.excel.entity;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

import java.util.Date;

@Data // 若未使用lombok插件,请自行生成getter、setter以及toString方法
public class DemoData {

    @ExcelProperty("字符串标题")
    private String string;

    @ExcelProperty("日期标题")
    private Date date;

    @ExcelProperty("数字标题")
    private Double doubleData;
    
    /**
     * 忽略这个字段
     */
    @ExcelIgnore
    private String ignore;
}

以下是EasyExcel官方给的注解解释:
在这里插入图片描述

基本的写

直接上代码,解释见注释:

package start.excel.easyexcel;

import com.alibaba.excel.EasyExcel;
import org.junit.Test;
import start.excel.entity.DemoData;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @ClassName EasyExcelRead
 * @Description easyexcel本地生成文件演示
 * @Author 古阙月
 * @Date 2020/11/28 10:47
 * @Version 1.0
 */
public class EasyExcelWrite {

    /**
     * 需要写入的文件路径
     */
    private static final String PATH = "D:\\IdeaProjects\\my_study_demo\\src\\main\\java\\start\\excel\\easyexcel";

    /**
     * 数据部分 - 生成实体类集合
     * @return
     */
    private List<DemoData> data() {
        List<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;
    }

    /**
     * 最简单的写
     */
    @Test
    public void simpleWrite() {

        String fileName = PATH + File.separator + "demo.xlsx";
        String sheetName = "模板";

        /**
         * fileName - 文件名(包含路径)
         * DemoData.class - 实体类的反射对象
         * sheetName - 工作表的名称
         * data() - 数据部分(实体类集合)
         */
        EasyExcel.write(fileName, DemoData.class).sheet(sheetName).doWrite(data());
    }
}

运行后到PATH的路径下找到名为demo.xlsx的excel文件查看:
在这里插入图片描述
写入成功!!!

基本的读

读入部分:

package start.excel.easyexcel;

import com.alibaba.excel.EasyExcel;
import org.junit.Test;
import start.excel.entity.DemoData;

import java.io.File;

/**
 * @ClassName EasyExcelRead
 * @Description easyexcel读取示范
 * @Author 古阙月
 * @Date 2020/11/28 11:01
 * @Version 1.0
 */
public class EasyExcelRead {

    /**
     * 读取的excel所在的路径
     */
    private static final String PATH = "D:\\IdeaProjects\\my_study_demo\\src\\main\\java\\start\\excel\\easyexcel";

    /**
     * 最简单的读
     * 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
     * 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
     */
    @Test
    public void simpleRead() {
        
        // 路径的文件名 - 即文件所在位置,通过它能找到这个文件
        String fileName = PATH + File.separator + "demo.xlsx";
        
        /**
         * fileName - 文件名(包含路径)
         * DemoData.class - 实体类的反射对象
         * new DemoDataListener() - 监听器
         * sheetName - 工作表的名称
         * data() - 数据部分(实体类集合)
         */
        EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();

    }
}

在监听器里面拿到数据:

package start.excel.easyexcel;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import start.excel.entity.DemoData;

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

// 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
public class DemoDataListener extends AnalysisEventListener<DemoData> {

    /**
     * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
     */
    private static final int BATCH_COUNT = 6;
    
    List<DemoData> list = new ArrayList<DemoData>();

    /**
     * 这个每一条数据解析都会来调用
     * @param data
     * @param context
     */
    @Override
    public void invoke(DemoData data, AnalysisContext context) {

        System.out.println("解析到一条数据:" + JSON.toJSONString(data));
        list.add(data);
        // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
        if (list.size() >= BATCH_COUNT) {

            // 存储完成清理 list
            list.clear();
        }
    }
    /**
     * 所有数据解析完成了 都会来调用
     * @param context
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        System.out.println("最后一次解析了" + list.size() + "条数据!");
        System.out.println("所有数据解析完成!");
    }
}

运行得:
在这里插入图片描述
解析完成!这里在监听器DemoDataListener里面采取了分批处理数据,如我们现在总共有10条数据,我们选择一次解析6条,那么第2次还剩下4条数据也就是最后一次解析了4条数据。当然,如果我们想把数据存入数据库,在监听器DemoDataListener里面操作就好。

web端的写入

代码如下:

package start.excel.easyexcel;

import com.alibaba.excel.EasyExcel;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import start.excel.entity.DemoData;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @ClassName EasyExcelWriteWeb
 * @Description Web中的写
 * @Author 古阙月
 * @Date 2020/12/8 21:38
 * @Version 1.0
 */
@RestController
@RequestMapping("excel")
public class EasyExcelWriteWeb {

    /**
     * 数据部分 - 生成实体类集合
     * @return
     */
    private List<DemoData> data() {
        List<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;
    }

    /**
     * excel文件下载(失败了会返回一个有部分数据的Excel)
     */
    @GetMapping("download")
    public void download(HttpServletResponse response) throws IOException {
        // 使用swagger 会导致各种问题,请直接用浏览器或者用postman
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");

        // 文件名 - URLEncoder.encode可以防止中文乱码
        String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");

        // 工作表名称
        String sheetName = "测试";

        /**
         * DemoData.class  - 创建excel对应的实体对象
         * sheetName - 工作表名称
         * data() - 数据部分
         */
        EasyExcel.write(response.getOutputStream(), DemoData.class).sheet(sheetName).doWrite(data());
    }
}

本地启动SpringBoot应用程序,因为没有在配置文件application.yml中配置端口,所以端口默认为8080
在这里插入图片描述
在浏览器输入: http://localhost:8080/excel/download:
在这里插入图片描述
点开左下角的excel文件:
在这里插入图片描述
完美!!!

关于easyexcel的不规则写入
weixin_51132780的博客
01-26 6197
最近在做一个项目时遇到了从数据库取数据生成一个账单的功能,其中一个excel中有多个sheet,有的是不规则的表格,有的则是比较规则的表格 做写入时发现了easyexcel这个开源的api,它在做大量数据的时候还可以保证内存不溢出,这点是比poi要好的,但是网上针对不规则的写入这个功能记录的比较少,这里写一下使用的过程 楼主也是小白一个,希望大家多指教,谢谢 这里先说一下思路:因为easyexcel写入都是使用list作为数据,而这个账单则使用一个实体就够了,所以这里使用二维数组保存数据,而实体
如何使用EasyExcel库来写入Excel文件
07-29
通过以上示例代码,你应该能够理解如何使用EasyExcel库在Java中进Excel文件的写入操作。这个库提供了简洁的API,使得Excel文件的操作变得非常方便。 总结一下,实现Excel文件写入的步骤包括: 1.引入EasyExcel的...
Excel添加,给指定插入,合并及样式
05-06
Java代码对Excel增,删,改。及样式
Java写入ExceleasyExcel
舌尖上的蛋炒饭的博客
11-11 1180
Java写入ExceleasyExcel 为什么要用easyExcel,没有什么比官网更好的介绍了 传送门 甚至接下来有关easyExcel的内容也都是从官网copy来的,不过当然是要自己敲一遍的哇 引入maven依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId>
EasyExcel追加写入数据,分批查询多次写入场景下,注意使用方式【OOM警告】
最新发布
Interesting
04-12 681
使用`.withTemplate(file) ` 将临时数据文件和真实数据文件合并的方式,在生产环境大批量数据下,完全不可取,有很高的内存溢出风险
EasyExcel的简单使用,包括读取写入
qq_40306697的博客
02-11 1005
1.dependency <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.6</version> </dependency> 2.Excel表格内容 3.封装的实体类 @Data public class ExcelData { @Excel
EasyExcel · 写excel
程序员朱永胜
05-09 1665
原文地址 通用数据生成 后面不会重复写 private List<DemoData> data() { List<DemoData> list = ListUtils.newArrayList(); for (int i = 0; i < 10; i++) { DemoData data = new DemoData(); data.setString("字符串" + i);
使用EasyExcel导入表格实现xlsx文件批量插入-----linux的mysql
just_learing的博客
07-18 930
使用EasyExcel导入表格实现xlsx文件批量插入-----linux的mysql
EasyExcel 的基本使用
热门推荐
凭心而动
12-21 1万+
EasyExcel的基本使用,包含了常用的写Excel、读Excel和填充Excel的方式;Web实际应用中的导入(上传)、导出(下载);以及导入Excel时通用监听器的代码实现和使用示例
java指定excel单元格里添加数据
fishermanMr
03-17 4531
package org.jeecg.modules.to.util; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.ap
EasyExcel写入读取操作
niki_yeun的博客
11-06 2194
EasyExcel
使用EasyexcelExcel读写操作
BUG专业户
10-24 1万+
easyexcel完成读写操作 poi导出excel
jxl操作excel写入数据不覆盖原有数据示例
09-04
网上很多例子,都是用Jxl读或者写excel,本文实现的功能就是将数据源in.xls的第几第几列数据写入到out.xls的第几第几列,不覆盖out.xls其他原有的数据。
android 写入读取Excel
03-29
附件为完整代码,使用jxl,直接接入项目即可使用,可以根据不同需求调用不同方法实现读取写入的功能
基于EasyExcelexcel解析工具类。
02-25
基于EasyExcel框架的excel解析工具类。EasyExcel是阿里的excel解析工具,使用快捷方便,轻量。封装了常用的方法。使用前需要了解easyExcel的基本用法。
easyexcel4j:基于Apache POI的海量数据导入和简单导出的Excel工具
05-17
<dependency> <groupId>com.github.ldzzdl</groupId> <artifactId>easyexcel4j</artifactId> <version>1.0.0</version></dependency>1.1 注解导入说明支持Excel的文件格式xls、xlsx程序将读取到的每一数据...
工业物联网 | 捕获车间设备上数据的五步指南
Hongke_Tech的博客
09-15 507
数据驱动流程能够将运营效率提高多达60%,这是绿地工厂(新建设、新工业系统下的工厂)在整个制造业中集成数据捕获技术的原因。 数据驱动的制造过程提供的优势包括:机器性能的可视性,优化生产周期,增强协作,业务洞察力和收入增长。要利用这些好处,必须开发并成功集成数据捕获和分析过程。 本文将讨论: ● 在绿地设施中植入数据捕获过程所需的数字技术 ●提在绿地设施中实施数据捕获技术的5个步骤 ● 如何利用和将捕获的数据投入使用 ● 数据驱动的制造过程的好处 数据捕获技术及其应用 要在绿地车间...
Apache POI和EasyExcel 第七集:EasyExcel的基本操作读取写入Excel,一足矣
XRT_knives的博客
01-07 1503
Apache POI和EasyExcel 第七集:EasyExcel的基本操作读取写入Excel,一搞定 一、资源 在这里设置lombok会遇到一个问题,以前在springboot那里都没遇到,也不知道为啥这里会出问题。。。。 Lombok Requires Annotation Processing: Do you want to enable annotation processors? Enable 二、代码实现 pom.xml <dependency>
POI&EasyExcel
Monster
03-09 1059
目前最流Apache和阿里巴巴EasyExcel pox.xml <!--03版本--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> &l
easyexcel读取excel写入到list<map>
05-25
你可以使用阿里巴巴的EasyExcel开源库来读取Excel文件,并将其写入到List<Map>中。下面是一个示例代码: ```java public List<Map<String, Object>> readExcel(File file) { List<Map<String, Object>> list = new ArrayList<>(); ExcelReader excelReader = null; try { // 创建 ExcelReader 对象 excelReader = EasyExcel.read(file).build(); // 获取第一个工作表 ReadSheet readSheet = EasyExcel.readSheet(0).build(); // 读取数据并写入到 List<Map> 中 excelReader.read(readSheet).headRowNumber(1).registerReadListener(new ReadListener() { private List<String> headList; @Override public void onReadSheet(int sheetIndex, String sheetName) { } @Override public void onReadRowData(List<String> rowData, AnalysisContext context) { if (headList == null) { // 第一为表头,记录表头信息 headList = rowData; } else { // 将每数据转换为 Map,并添加到 List 中 Map<String, Object> map = new HashMap<>(); for (int i = 0; i < headList.size(); i++) { map.put(headList.get(i), rowData.get(i)); } list.add(map); } } @Override public void onException(Exception exception, AnalysisContext context) { } }).doRead(); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭 ExcelReader 对象 if (excelReader != null) { excelReader.finish(); } } return list; } ``` 该方法接收一个Excel文件作为参数,并返回一个List<Map>对象。在方法中,我们使用EasyExcel库的read方法创建ExcelReader对象,然后使用readSheet方法获取第一个工作表。接着,我们使用registerReadListener方法注册一个ReadListener实例,该实例在读取Excel文件时会被调用。在ReadListener实例中,我们通过onReadRowData方法读取每一数据并将其转换为Map对象,最后将Map对象添加到List中。最后,我们关闭ExcelReader对象并返回List<Map>对象。 需要注意的是,该代码使用了Java 8的Lambda表达式语法。如果你使用的是Java 7或更早的版本,请将Lambda表达式替换为匿名内部类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • SpringBoot实现页面跳转的三种方式 40614
  • Fastjson异常解决->com.alibaba.fastjson.JSONException: unclosed single-quote string 17545
  • 巧用for循环绘制各种图形 13199
  • 今天我们来聊聊递归喝汽水问题 12803
  • JSON解析实战篇:JSON数组中含JSON数组 10388

分类专栏

  • 编程基础 2篇
  • Excel读写 10篇
  • 读书 · 随笔 · 杂谈 2篇
  • 一天一个设计模式 2篇
  • 算法 20篇
  • SpringBoot 18篇
  • JavaSE 14篇
  • 零基础学SpringCloud 3篇
  • JSON解析 9篇
  • JavaEE 1篇
  • HTML+CSS 1篇

最新评论

  • SpringBoot三步整合Thymeleaf模板技术(附Thymeleaf基本语法)

    weixin_45460877: 大佬你好,请问你遇到过点击事件里传值最后一个]报红的问题么,其实语法是没问题的

  • Java玩转《啊哈算法》暴力枚举之炸弹人

    CSDN-Ada助手: Java 技能树或许可以帮到你:https://edu.csdn.net/skill/java?utm_source=AI_act_java

  • 用Spring Initializr快速构建SpringBoot及整合MVC

    CSDN-Ada助手: 哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)提升标题与正文的相关性。

  • 肝了几万字,送给看了《算法图解》却是主攻Java的你和我(上篇)

    丁花: 你好,第四章递归求和,你所用的方法,不是书上的思想

  • 【Apache POI】Excel操作(六):Excel计算公式的读取和使用

    博学_java: 我输出的是空的

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • Java玩转《啊哈算法》暴力枚举之炸弹人
  • Java玩转《啊哈算法》暴力枚举之坑爹奥数
  • Java玩转《啊哈算法》之模拟链表
2024年14篇
2023年1篇
2021年3篇
2020年58篇

目录

目录

评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

4617作文网用天字起名字论语起女儿名字电脑免费起名男孩周公解梦被追赶起名八字周易免费花卉公司起名参考晨汐字起名寓意好不周易八卦看手相起品牌名子大全姓朱哪些怎么起名字股票周五可以交易吗八字算命免费起名注册食品公司起名高分起名子算死命小说下载全文用薛起名字周易学习班的《易经》和《周易》有什么区别小说算死命免费全文免费阅读全文周易正讲齐济申姓起名字醉梦江湖破解2019年5月生孩子起名周易命理分析周公解梦码算命八字缺什么女孩起关于春天的名字周公解梦瓜子百家讲台周易鼠年赖姓男孩起名淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男子给前妻转账 现任妻子起诉要回网友建议重庆地铁不准乘客携带菜筐月嫂回应掌掴婴儿是在赶虫子重庆警方辟谣“男子杀人焚尸”国产伟哥去年销售近13亿新的一天从800个哈欠开始男孩疑遭霸凌 家长讨说法被踢出群高中生被打伤下体休学 邯郸通报男子持台球杆殴打2名女店员被抓19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警两大学生合买彩票中奖一人不认账德国打算提及普京时仅用姓名山西省委原副书记商黎光被逮捕武汉大学樱花即将进入盛花期今日春分张家界的山上“长”满了韩国人?特朗普谈“凯特王妃P图照”王树国3次鞠躬告别西交大师生白宫:哈马斯三号人物被杀代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了房客欠租失踪 房东直发愁倪萍分享减重40斤方法“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火手机成瘾是影响睡眠质量重要因素考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼网友洛杉矶偶遇贾玲呼北高速交通事故已致14人死亡西双版纳热带植物园回应蜉蝣大爆发男孩8年未见母亲被告知被遗忘张立群任西安交通大学校长恒大被罚41.75亿到底怎么缴沈阳一轿车冲入人行道致3死2伤奥运男篮美国塞尔维亚同组周杰伦一审败诉网易国标起草人:淀粉肠是低配版火腿肠外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万杨倩无缘巴黎奥运男子被猫抓伤后确诊“猫抓病”春分“立蛋”成功率更高?记者:伊万改变了国足氛围奥巴马现身唐宁街 黑色着装引猜测

4617作文网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化