【EasyExcel】在Java中操作Excel 完成数据的导入导出

news2024/11/15 10:18:15

快速入门

引入依赖

构建实体类

数据导出

参数

WriteWorkbook

WriteSheet

WriteTable

测试

数据导入

测试


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

GitHub地址:GitHub - alibaba/easyexcel: 快速、简洁、解决大文件内存溢出的java处理Excel工具

快速入门

引入依赖

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

构建实体类

@Data //为实体类提供set、get方法
public class User {
    //此注解用于Excel的表头
    @ExcelProperty("用户姓名")
    private String username;

    @ExcelProperty("用户性别")
    private String sex;

    @ExcelProperty("用户年龄")
    private Integer age;

    //此注解会在数据导出之后忽略该字段
    @ExcelIgnore
    private String address;
}

数据导出

参数

  • WriteWorkbook 可以理解成一个excel
  • WriteSheet 理解成一个excel里面的一个表单
  • WriteTable 一个表单里面如果有多个实际用的表格,则可以用WriteTable

这是三个参数都有的通用参数,如果这些均为空,那么默认使用上级。

名称默认值描述
converter默认加载了很多转换器,这里可以加入不支持的字段
writeHandler写的处理器。可以实现WorkbookWriteHandler,SheetWriteHandler,RowWriteHandler,CellWriteHandler,在写入excel的不同阶段会调用
relativeHeadRowIndex0写入到excel和上面空开几行
headclazz二选一。读取文件头对应的列表,会根据列表匹配数据,建议使用class
clazzhead二选一。读取文件的头对应的class,也可以使用注解。如果两个都不指定,则会读取全部数据
autoTrimtrue会对头、读取数据等进行自动trim
use1904windowingfalseexcel中时间是存储1900年起的一个双精度浮点数,但是有时候默认开始日期是1904,所以设置这个值改成默认1904年开始
useScientificFormatfalse数字转文本的时候在较大的数值的是否是否采用科学计数法
needHeadtrue是否需要写入头到excel
useDefaultStyletrue是否使用默认的样式
automaticMergeHeadtrue自动合并头,头中相同的字段上下左右都会去尝试匹配
excludeColumnIndexes需要排除对象中的index的数据
excludeColumnFieldNames需要排除对象中的字段的数据
includeColumnIndexes只要导出对象中的index的数据
includeColumnFieldNames只要导出对象中的字段的数据

WriteWorkbook

EasyExcel.write(fileName, User.class)
         //在write方法之后,在 sheet方法之前都是设置WriteWorkbook的参数
         .sheet("模板")
         .doWrite(传入的数据);

WriteSheet

EasyExcel.write(fileName, User.class)
         .sheet("模板")
         //在sheet方法之后,在 sheet方法之前都是设置WriteSheet的参数
         .doWrite(传入的数据);

WriteTable

EasyExcel.write(fileName, User.class)
         .sheet("模板")
         .table()
         //在table方法之后,在 sheet方法之前都是设置WriteTable的参数
         .doWrite(传入的数据);

​

测试

public class TestWrite {
    public static void main(String[] args) {
        String fileName = "C:\\Users\\Administrator\\Desktop\\EasyExcel\\用户信息.xlsx";
        //创建一个集合放入用户信息
        List<User> list = new ArrayList<>();
        User u1 = new User("张三","男",18,"福建省");
        User u2 = new User("李四","女",17,"浙江省");
        User u3 = new User("王五","男",22,"江西省");
        User u4 = new User("赵六","男",19,"江苏省");
        User u5 = new User("小七","女",20,"广东省");
        list.add(u1);
        list.add(u2);
        list.add(u3);
        list.add(u4);
        list.add(u5);
        //这里用到了EasyExcel的写功能
        //write传入文件导出位置以及写入信息的字节码文件
        //sheet传入模板内容
        //doWrite用于将传入的数据进行分页查询
        EasyExcel.write(fileName, User.class).sheet("UserTable").doWrite(list);
    }
}

数据导入

public class TestRead {
    public static void main(String[] args) {
        String fileName = "C:\\Users\\Administrator\\Desktop\\EasyExcel\\用户信息.xlsx";
        EasyExcel.read(fileName, User.class,new ExcelListener())
                 .sheet()
                 //doReda()方法用于关闭读取流
                 .doRead();
    }
}

public class ExcelListener extends AnalysisEventListener<User> {

    /**
     * 一行一行读取Excel内容,从第二行开始读取
     * @param user
     * @param analysisContext
     */
    @Override
    public void invoke(User user, AnalysisContext analysisContext) {
        System.out.println(user);
    }

    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        System.out.println("表头信息" + headMap);
    }

    /**
     * 读取完Excel后执行
     * @param analysisContext
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        System.out.println("读取完Excel后执行");
    }
}

测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/171968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Ajax】form表单

一、form表单的基本使用什么是表单表单在网页中主要负责数据采集功能。HTML中的<form>标签&#xff0c;就是用于采集用户输入的信息&#xff0c;并通过<form>标签的提交操作&#xff0c;把采集到的信息提交到服务器端进行处理。2. 表单的组成部分<!-- 表单标签 …

Android 深入系统完全讲解(27)

讲完了这块&#xff0c;我们来说下相机相关的&#xff0c;再说之前一定记得&#xff0c;先要有框架思维&#xff0c;这点一直是我 强调的。 相机是什么&#xff0c;硬件采集数据上来&#xff0c;解析完成&#xff0c;上层绘制&#xff0c;在绘制的时候&#xff0c;同步可以做特…

iOS 国际化(多语言)

一、应用程序国际化 包括app名称和各种权限的提示文字。 1.1 创建工程&#xff0c;再在“PROJECT”的“Info”里面&#xff0c;添加所需语言。 1.2 从代码中分离出文本 创建一个 “.strings” 扩展名的文件 来本地化字符串&#xff0c;需要把这些字符串全部放在一个单独的文…

【医学数据融合文本方向 思路整理】

Scalable and accurate deep learning for electronic health records【2018】 本论文在于介绍 Google Medical Brain 项目的目标、方法和规划。 思路&#xff1a; 用病情描述&#xff0c;预测疾病诊断&#xff0c;预测死亡率 用病情描述加治疗方案&#xff0c;预测复诊率和住院…

Elasticsearch7.8.0版本高级查询—— 查询所有文档

目录一、初始化文档数据二、查询所有文档示例一、初始化文档数据 在 Postman 中&#xff0c;向 ES 服务器发 POST 请求 &#xff1a;http://localhost:9200/user/_doc/1&#xff0c;请求体内容为&#xff1a; {"name":"张三","age":22,"sex…

Zookeeper 【下载与安装,基本使用】

目录 1. 什么是zookeeper 2. zookeeper下载与安装 3. Zookeeper 测试 1. 什么是zookeeper zookeeper实际上是yahoo开发的&#xff0c;用于分布式中一致性处理的框架。最初其作为研发Hadoop时的副产品。 由于分布式系统中一致性处理较为困难&#xff0c;其他的分布式系统没有…

SAP MTO/MTS操作步骤及月末结算

一、MTO/MTS操作步骤 【MTO核算方式】 是以销售订单触发生产的方式。 创建销售订单 VA01 运行物料需求计划 MD01 查询物料需求 MD04 计划订单转化为生产订单 MD04/CO01 生产订单成本计算以及下达 CO02 生产订单发料 MB1A 生产报工 CO11N 完成品入库 MB31 非限制库存转移到销售…

C# opencv多模板匹配实战应用例程

C# 多模板匹配例程 最近在做项目的时候为了检测某一种物品的齐套性&#xff0c;以及为了和写c#的软件负责人配合自己研究了一下opnencv C# 版的模板匹配&#xff0c;对基础的例程做了一下改进&#xff0c;留一份例程。 因为工作性质原因不能直接放项目的实际图片我用visio简单…

我的个人微信也迅速接入了 ChatGPT

本文主要来聊聊如何快速使用个人微信接入 ChatGPT&#xff0c;欢迎 xdm 尝试起来&#xff0c;仅供学习参考&#xff0c;切莫用于做不正当的事情 关于 ChatGPT 我们每个人都可以简单的使用上&#xff0c;不需要你有很强的技术背景&#xff0c;不需要你有公众号&#xff0c;甚至…

Chat GPT 创建APP: 开发人员要被替代了吗?

我们又要被人工智能取代了吗&#xff1f;GitHub Copilot 于 2021 年 10 月发布&#xff0c;整个开发社区都为之疯狂。有些人发表言论说我们很快就会失业&#xff0c;而其他人&#xff08;比如我&#xff09;&#xff0c;认为虽然这个工具很有趣&#xff0c;但距离替代人工还很远…

【Django框架】——25 Django视图 07 状态保持Session

文章目录1.session流程图2.session语法与案例3.session配置cookie不安全&#xff0c;会把所有敏感数据放到浏览器保存。 session是把敏感数据存到自己的服务器中给浏览器一把钥匙就行了&#xff08;是基于cookie完成的&#xff09;。 Django 提供对匿名会话(session)的完全支…

Cisco Packet Tracer 8.2.x Crack

Cisco Packet Tracer 是一个网络模拟器。有了这款功能强大的软件&#xff0c;用户可以在模拟和安全的环境中学习所有网络主题&#xff0c;而无需花费很多钱。它是网络主题模拟和培训领域中最受欢迎的应用程序之一&#xff0c;因为它提供了这样做所需的所有功能。Packet Tricer …

Java方法(函数)

文章目录Java方法(函数)一、方法介绍二、方法的定义和调用格式1. 快速入门2. Debug查看方法的执行流程3. 方法调用内存图解4. 带参数方法的定义和调用1&#xff09;定义和调用格式2&#xff09;形参和实参5. 带返回值方法的定义和调用6. 方法通用定义格式三、方法常见问题四、方…

MIPI 摄像头的原理

1. 摄像头sensor 的原理 定时脉冲生成器会生成clock&#xff0c;用于访问image sensor 阵列中的行&#xff0c;预充电&#xff0c;并且按顺序采样像素阵列中的所有行。在一个行的预充电和采样的时间段里&#xff0c;像素的电荷量会随着曝光时间而逐渐减少。这就是快门结构中的曝…

擎创技术流 | ClickHouse实用工具—ckman教程(10)

一、前言 哈喽~友友们&#xff0c;转眼农历新年就在眼前&#xff0c;ckman系列也终于迎来了最后一期&#xff0c;非常感谢大家的喜欢&#xff0c;让up主有动力做完这个系列&#xff0c;也感谢一路走来&#xff0c;大家给予的反馈&#xff0c;让这个系列越做越好。 接下来&…

4-Spring使用

目录 1.存储Bean对象到Spring容器中 1.1.创建Bean 1.2.将Bean注册到Spring容器中 1.2.1.第一次存储Bean&#xff08;可选&#xff0c;如果是第二次及以后&#xff0c;此步骤忽略&#xff09; 1.2.2.添加Bean标签 2.从Spring容器中获取并使用Bean对象 2.1.创建Spring上下…

剑指 Offer 04. 二维数组中的查找 [C语言]

目录题目思路代码结果该文章只是用于记录考研复试刷题题目 在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右 非递减 的顺序排序&#xff0c;每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数&#xff0c;输入这样的一个二维数组和一个整数&#xff…

[leetcode 1723] 完成所有工作的最短时间

题目 题目&#xff1a;https://leetcode.cn/problems/find-minimum-time-to-finish-all-jobs/description/ 该题和 [leetcode 2305] 公平分发饼干 完全相同。 解法 回溯剪枝 感觉和 [leetcode 198] 划分为k个相等的子集 有点相似&#xff0c;这题更像是划分为k个尽量相等的子…

easypoi 模板导入、导出合并excel单元格功能

easypoi 模板导入、导出合并单元格功能 参考&#xff1a; java使用poi读取跨行跨列excel springboot集成easypoi并使用其模板导出功能和遇到的坑 Easypoi Excel模板功能简要说明 easypoi 模板导出兼容合并单元格功能 ExcelUtil package com.yymt.utils;import cn.aftertu…

linux系统中利用QT实现环境传感器的数据获取方法

大家好&#xff0c;今天主要和大家分享一下&#xff0c;如何使用QT实现对三合一环境传感器的数据的获取和实现。 目录 第一&#xff1a;资源介绍 第二&#xff1a;具体代码的详细实现 第三&#xff1a;源文件“mainwindow.h”实现 第四&#xff1a;Linux应用接口获取数据 第…