iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >【java学习】EasyExcel的简单使用
  • 931
分享到

【java学习】EasyExcel的简单使用

java学习 2023-10-03 14:10:08 931人浏览 薄情痞子
摘要

Easyexcel的简单使用 前言Excel读1.实体类2.读监听器与测试类3.输出结果 Excel写1.实体类2.写入Excel的测试类3.输出结果 填充Excel1.Excel模板

Easyexcel的简单使用

前言

EasyExcel类是一套基于Java的开源Excel解析工具类,相较于传统的框架如Apache poi、jxl等更加快速、简洁,还可以解决大文件内存溢出问题,即能让使用者在不用考虑性能、内存的等因素的情况下,快速完成Excel的读(导入)、写(导出)等功能。

版本支持:
2+版本支持Java7&Java6
3+版本支持Java8

这里使用的EasyExcel版本为3.1.1,jdk版本为1.8.0_161,同时辅助使用lombok和fastJSON以简化代码或转化为Jason数据。
Maven依赖配置:

<dependencies><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>//非必要<version>1.16.10</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId>//非必要<version>1.2.47</version></dependency></dependencies>

Excel读

样例内容:
样例内容

1.实体类

import com.alibaba.excel.annotation.ExcelProperty;import lombok.Data;import lombok.AllArgsConstructor;import lombok.NoArgsConstructor;@Data@NoArgsConstructor@AllArgsConstructorpublic class TextReadObject {    @ExcelProperty(index = 0)    private Integer studentId;    @ExcelProperty(index = 1)    private String studentName;    @ExcelProperty(index = 2)    private String institute;    @ExcelProperty(index = 3)    private Integer level_11;    @ExcelProperty(index = 4)    private Integer level_12;    @ExcelProperty(index = 5)    private Integer level_21;    @ExcelProperty(index = 6)    private Integer level_22;}

其中注解@ExcelProperty可包含两个参数index和value,在简单表头(即表头只占用一行)中以下两条注解基本等价

@ExcelProperty(index = 0)
@ExcelProperty(value = “学号”)

而在复杂表头(即本例)中,需要使用index表示。
另外需要注意的是加入表头名字出现重复,会导致只有一个字段读取到数据,此外在读取操作时不建议index和value同时使用。综上所述,在已知excel表头内容的情况下使用参数index。

2.读监听器与测试

四个监听器,这里使用前两个

名称说明
AnalysisEventListener < T >分析事件侦听器:接收解析的每条数据的返回。
SyncReadListener同步读取侦听器。
AbstractIgnoreExceptionReadListener抽象忽略异常读取侦听器。
ModelBuildEventListener模型构建事件侦听器。

AnalysisEventListener < T >
所有已实现的接口:Listener、ReadListener
直接已知子类:SyncReadListener

返回值类型方法说明
booleanhasNext验证是否有另一条数据,可以通过返回 false 来停止读取。
voidinvokeHead分析第一行时触发调用函数。
voidinvokeHeadMap以map的形式放回表头,覆盖当前方法以接收表头数据
voidonException任何一个监听器进行错误报告时,所有监听器都会收到此方法
import com.alibaba.excel.context.AnalysisContext;import com.alibaba.excel.event.AnalysisEventListener;import java.util.Map;import java.util.List;import lombok.AllArgsConstructor;@AllArgsConstructorpublic class DemoDataListener extends AnalysisEventListener<TextReadObject> {    private List<TextReadObject> dataList;    //读取表头的内容    @Override    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {        System.out.println("表头->"+headMap);    }    //一行一行读取excel中的内容    @Override    public void invoke(TextReadObject data, AnalysisContext context) {        dataList.add(data);    }    //读取完成之后执行的方法    @Override    public void doAfterAllAnalysed(AnalysisContext context) {}}

读取Excel的测试类:

import com.alibaba.excel.EasyExcel;import com.alibaba.fastjson.JSON;import java.util.ArrayList;import java.util.List;public class ExcelImport {public static void simpleRead() {        String fileName = "F:\\rdtext.xls";        List<TextReadObject> dataList = new ArrayList<>();        //每次会读取100条数据然后返回过来,直接调用使用数据就行        EasyExcel.read(fileName, TextReadObject.class, new DemoDataListener(dataList))                .sheet(0)//读取第一个sheet                .headRowNumber(3) //跳过前三行表头内容,假如是简单表头则这句可省略                .doRead();        //若需要实现读取全部sheet,可以使用.doReadAll()代替.sheet(0).doRead()        for (TextReadObject dl : dataList) {            System.out.println(JSON.toJSONString(dl));        }}public static void main(String[] args) { simpleRead(); }}

SyncReadListener:
所有已实现的接口:Listener、ReadListener
直接已知父类:AnalysisEventListener < T >

返回值类型方法说明
voiddoAfterAllAnalysed如果有什么操作在全部分析结束后执行
List < Object >getList
voidinvoke当分析一行触发器调用函数
voidsetList (List < Object > list)
此处将监听器写到测试类内部
import com.alibaba.excel.EasyExcel;import com.alibaba.excel.context.AnalysisContext;import com.alibaba.excel.event.SyncReadListener;import com.alibaba.fastjson.JSON;import java.util.ArrayList;import java.util.List;import java.util.Map;public class ExcelImportSync {    public static void simpleRead() {        String fileName = "F:\\text.xls";        final List dataList = new ArrayList();        EasyExcel.read(fileName, TextReadObject.class, new SyncReadListener() {            @Override            public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {                System.out.println("表头->"+headMap);            }            @Override            public void invoke(Object object, AnalysisContext context) {                dataList.add(object);            }        }).sheet(0).headRowNumber(3).doRead();        for (Object o : dataList) {            TextReadObject TOB = (TextReadObject) o;            System.out.println(JSON.toJSONString(TOB));        }    }    public static void main(String[] args) { simpleRead(); }}

相较于AnalysisEventListener < T >,SyncReadListener更加适合对多种实体类实施相同操作的情况,在定义监听器时没有指定具体的实体类。

3.输出结果

二者输出结果一样:
结果

Excel写

1.实体类

import com.alibaba.excel.annotation.ExcelProperty;import com.alibaba.excel.annotation.write.style.ColumnWidth;import com.alibaba.excel.annotation.write.style.ContentRowHeight;import com.alibaba.excel.annotation.write.style.HeadRowHeight;import lombok.Data;import lombok.AllArgsConstructor;import lombok.NoArgsConstructor;@Data@NoArgsConstructor@AllArgsConstructor@ColumnWidth(15) //列宽,最大值为255@HeadRowHeight(16) //表头行高@ContentRowHeight(16) //数据行高public class TextWriteObject {    //复杂表头自动合并相同的内容    @ExcelProperty(index = 0, value = {"学号", "学号", "学号"})    private Integer studentId;    @ExcelProperty(index = 1, value = {"姓名", "姓名", "姓名"})    private String studentName;    @ColumnWidth(25)//单独设置列宽    @ExcelProperty(index = 2, value = {"学院", "学院", "学院"})    private String institute;    //复杂表头嵌套    @ExcelProperty(index = 3, value = {"成绩", "第一学年", "第一学期"})    private Integer level_11;    @ExcelProperty(index = 4, value = {"成绩", "第一学年", "第二学期"})    private Integer level_12;    @ExcelProperty(index = 5, value = {"成绩", "第二学年", "第一学期"})    private Integer level_21;    @ExcelProperty(index = 6, value = {"成绩", "第二学年", "第二学期"})    private Integer level_22;}

此时在注解@ExcelProperty中可以同时使用参数index和value,用于同时指定位置和内容。

其他未使用注解:
@ContentStyle用于设置内容格式

参数说明
dataFORMat日期格式
hidden设置单元格使用此样式隐藏
locked设置单元格使用此样式
quotePrefix在单元格前面增加`符号,数字或公式将以字符串形式展示
horizontalAlignment设置是否水平居中
wrapped设置文本是否应换行。将此标志设置为true通过在多行上显示使单元格中的所有内容可见
verticalAlignment设置是否垂直居中
rotation设置单元格中文本旋转角度。03版本的Excel旋转角度区间为-90°~90°,07版本的Excel旋转角度区间为0°-180°
indent设置单元格中缩进文本的空格数
borderLeft设置左边框的样式
borderRight设置右边框样式
borderTop设置上边框样式
borderBottom设置下边框样式
leftBorderColor设置左边框颜色
rightBorderColor设置右边框颜色
topBorderColor设置上边框颜色
bottomBorderColor设置下边框颜色
fillPatternType设置填充类型
fillBackgroundColor设置背景色
fillForegroundColor设置前景色
shrinkToFit设置自动单元格自动大小

@ContentFontStyle用于设置单元格内容字体格式

参数说明
fontName字体名称
fontHeightInPoints字体高度
italic是否斜体
strikeout是否设置删除水平线
color字体颜色
typeOffset偏移量
underline下划线
bold是否加粗
charset编码格式

@HeadFontStyle用于定制标题字体格式

参数说明
fontName设置字体名称
fontHeightInPoints设置字体高度
italic设置字体是否斜体
strikeout是否设置删除线
color设置字体颜色
typeOffset设置偏移量
underline设置下划线
charset设置字体编码
bold设置字体是否加粗

@ExcelIgnore不将该字段转换成Excel

@ExcelIgnoreUnannotated没有注解的字段都不转换

2.写入Excel的测试类

import com.alibaba.excel.EasyExcel;import java.util.ArrayList;import java.util.List;public class ExcelExport {    public static void simpleWrite(){        String fileName = "F:\\wttext.xls";        List<TextWriteObject> dataList = new ArrayList<>();        dataList.add(new TextWriteObject(2022101, "张三",                "生命科学院", 653, 602, 683, 707));        dataList.add(new TextWriteObject(2022102, "李四",                "生命科学院", 568, 596, 611, 632));        dataList.add(new TextWriteObject(2022103, "王五",                "生命科学院", 606, 673, 624, 653));        dataList.add(new TextWriteObject(2022201, "赵六",                "语言文学院", 710, 722, 686, 703));        EasyExcel.write(fileName, TextWriteObject.class)                .sheet(0)                .doWrite(dataList);    }    public static void main(String[] args) { simpleWrite(); }}

3.输出结果

结果

填充Excel

填充功能可以事先在Excel中设计好格式和排版,再在后台将需要导出的数据传入fill方法完成最终Excel文件。

1.Excel模板

excel模板
此模板允许多条填充,以第一列为例,若为{studentId}则仅允许单条填充。
如果本来就有 {} ,用转义\{\}代替。

2.测试类

import com.alibaba.excel.EasyExcel;import com.alibaba.excel.ExcelWriter;import com.alibaba.excel.write.builder.ExcelWriterBuilder;import com.alibaba.excel.write.metadata.WriteSheet;import com.alibaba.excel.write.metadata.fill.FillConfig;import java.util.ArrayList;import java.util.List;public class ExcelFill {    public static void simpleFill(){        List dataList = new ArrayList();        dataList.add(new TextWriteObject(2022101, "张三",                "生命科学院", 653, 602, 683, 707));        dataList.add(new TextWriteObject(2022102, "李四",                "生命科学院", 568, 596, 611, 632));        dataList.add(new TextWriteObject(2022103, "王五",                "生命科学院", 606, 673, 624, 653));        dataList.add(new TextWriteObject(2022201, "赵六",                "语言文学院", 710, 722, 686, 703));        String writeFile = "F:\\filltext.xls";        String templateFile = "F:\\template.xls";        ExcelWriterBuilder writerBuilder = EasyExcel                .write(writeFile, TextReadObject.class)                .withTemplate(templateFile);        WriteSheet writeSheet = writerBuilder.sheet().build();        ExcelWriter excelWriter = writerBuilder.build();        //在填充玩多结果数据后,要强制换行,不然后续的单结果数据会发生覆盖现象        FillConfig fillConfig = FillConfig.builder().forceNewRow(true).build();        excelWriter.fill(dataList, fillConfig, writeSheet);        excelWriter.finish();//调用finish方法,关闭文件流    }    public static void main(String[] args) { simpleFill(); }}

3.输出结果

输出

更详细的内容请参考官方文档:
https://easyexcel.opensource.alibaba.com/docs/current/

来源地址:https://blog.csdn.net/hermit_f/article/details/126850664

--结束END--

本文标题: 【java学习】EasyExcel的简单使用

本文链接: https://www.lsjlt.com/news/423061.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 【java学习】EasyExcel的简单使用
    EasyExcel的简单使用 前言Excel读1.实体类2.读监听器与测试类3.输出结果 Excel写1.实体类2.写入Excel的测试类3.输出结果 填充Excel1.Excel模板...
    99+
    2023-10-03
    java 学习
  • Java新手学习之IO流的简单使用
    目录前言IO流1、基本概念 2、IO流分类 3、File3.1File基本概念3.2创建文本3.3创建目录3.4判断、读取和删除4、字节流 4.1字节流...
    99+
    2024-04-02
  • python学习-ansible简单使用
    一、介绍Ansible 一种集成 IT 系统的配置管理、应用部署、执行特定任务的开源平台,是 AnsibleWorks 公司名下的项目,该公司由 Cobbler 及 Func 的作者于 2012 年创建成立。Ansible 基于 Pytho...
    99+
    2023-01-31
    简单 python ansible
  • Android学习之Broadcast的简单使用
    本文实例为大家分享了Android学习之Broadcast的使用方法,供大家参考,具体内容如下实现开机启动提示网络的广播package com.example.luobo.broadcasttest;import android.conte...
    99+
    2023-05-30
    android broadcast roi
  • python学习-paramiko简单使
        paramiko是基于python实现的ssh2远程安全连接,支持认证及密钥方式。可以实现远程命令执行,文件传输、中间ssh代理等功能。安装:pip install paramiko或 easy_install paramikopa...
    99+
    2023-01-31
    简单 python paramiko
  • 使用java解析和读取excel表格(EasyExcel的简单使用)
    ** 解析excel的工具 ** Apache POI、JXL、Alibaba EasyExcel等。其中Apache POI基于DOM方式进行解析,将文件直接加载内存,所以速度较快,适合Excel文...
    99+
    2023-09-05
    excel java 开发语言
  • Java简单使用EasyExcel操作读写excel的步骤与要点
    目录前言引入EasyExcel依赖easyExcel写easyExcel读总结下easyExcel的步骤和要点结语前言 EasyExcel是一个基于Java的、快速、简洁、解决大文件...
    99+
    2024-04-02
  • 怎么使用Java打造一款简单的英语学习系统
    本篇内容介绍了“怎么使用Java打造一款简单的英语学习系统”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!【一、项目背景】随着移动互联网的发展...
    99+
    2023-06-15
  • python列表(list)的简单学习
    列表是由一系列按特定顺序排列的元素组成, 是 Python 中使用最频繁的数据类型。列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表、字典(即嵌套)。 用([])来表示列表,并用逗号(...
    99+
    2023-01-30
    简单 列表 python
  • Python3学习(34)--简单网页内
    基础讲多了也不好,懂的人看了烦躁,半懂的人看多了没耐心,我也不能打消了你们学习Python的积极性了,开始爬虫系列基础篇之前,先上一张图,给大脑充充血: 很多人,学习Python,无非两个目的,一个就是纯粹玩(确实好玩),一个就是为...
    99+
    2023-01-31
    简单 网页
  • Java怎么使用EasyExcel进行单元格合并
    本篇内容介绍了“Java怎么使用EasyExcel进行单元格合并”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.项目场景:简介:报销单导出...
    99+
    2023-07-02
  • python元组和字典的简单学习
    用圆括号()标识,定义元组后,元组元素不可修改。如果想修改元组只能重新定义元组。 因为元组不可更改,所以也没有增删改等用法,主要语法就是访问元组元素,遍历元组。 访问元组元素: 1 tuple1 = (1, 2, 3, 4) 2 pr...
    99+
    2023-01-30
    字典 简单 python
  • Python学习——实现简单的交互raw
    row_input的使用:>>> name=raw_input("please input your name:") please input your name:xiaobai >>> name 'xi...
    99+
    2023-01-31
    简单 Python raw
  • 简单学习SQL的各种连接Join
    SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。 最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN)、SQL LEFT JOIN、SQL RIGH...
    99+
    2024-04-02
  • Java中EasyExcel的使用方式
    目录背景项目构建及依赖创建实体类生成Excel解析Excel其他相关特殊用法自定义转换器保留两位小数排除指定Excel列小结背景 系统中经常要导出大量的数据,格式基本上都是Excel...
    99+
    2022-11-13
    Java 中EasyExcel的使用方式 Java EasyExcel
  • 学习python:练习5.简单红包程序
    快过年了,最近不少群里都发红包,晚上突然想用这个红包做个练习,简单实现了一下,效果不错哦觉得稍微有点困难的地方是红包的算法,想了久了点,也不知道微信的算法是咋样的...效果:代码:# 简单的拼手气红包 import random from...
    99+
    2023-01-31
    红包 简单 程序
  • python神经网络学习使用Keras进行简单分类
    目录学习前言Keras中分类的重要函数1、np_utils.to_categorical2、Activation3、metrics=[‘accuracy’]全...
    99+
    2024-04-02
  • mac python学习开发简单入门
    安装 Mac自带python 在/usr/bin/python 进入终端直接键入python即可进入交互模式 或是python xxx.py 运行 写好的python程序 Last login: Sat Aug 19 20...
    99+
    2023-01-31
    入门 简单 mac
  • 如何使用MongoDB开发一个简单的机器学习系统
    如何使用MongoDB开发一个简单的机器学习系统随着人工智能和机器学习的发展,越来越多的开发者开始使用MongoDB作为他们的数据库选择。MongoDB是一个流行的NoSQL文档型数据库,它提供了强大的数据管理和查询功能,非常适合用于存储和...
    99+
    2023-10-22
    机器学习 开发 MongoDB
  • 从零开始学习 Java:简单易懂的入门指南(二)
    Java基础语法 1. 注释1.1使用的技巧1.2注意点 2. 关键字2.1 概念2.2 第一个关键字class 3. 字面量3.1区分技巧 4. 变量4.1 什么是变量?4.2 变量的定义格式4.2.1 格式详解...
    99+
    2023-08-19
    学习 java intellij-idea 开发语言 后端
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作