Easy Excel

Easy Excel

    • 一、依赖引入
    • 二、基本使用
      • 1. 定义实体类(导入/导出共用)
      • 2. 写 Excel
      • 3. 读 Excel
    • 三、常用注解说明(完整列表)
    • 四、进阶:自定义转换器(Converter)
  • 其它
    • 自定义转换器没生效

Easy Excel在POI的基础上进行了优化。
EasyExcel 是阿里巴巴开源的 Java Excel 读写工具,相比 Apache POI 更加轻量和高效。它广泛用于大数据量的 Excel 导入导出场景,特别适合 Spring Boot 项目中使用。

下面是 EasyExcel 的常用使用方式和注解说明:


一、依赖引入

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

二、基本使用

1. 定义实体类(导入/导出共用)

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.Data;import java.util.Date;@Data
@ColumnWidth(20) // 设置列宽
public class UserExcel {@ExcelProperty("ID")private Long id;@ExcelProperty("用户名")private String username;@ExcelProperty("创建时间")@DateTimeFormat("yyyy-MM-dd HH:mm:ss")private Date createTime;
}

2. 写 Excel

List<UserExcel> dataList = ...;String fileName = "用户信息.xlsx";
EasyExcel.write(fileName, UserExcel.class).sheet("用户列表").doWrite(dataList);

3. 读 Excel

public class UserExcelListener extends AnalysisEventListener<UserExcel> {@Overridepublic void invoke(UserExcel data, AnalysisContext context) {System.out.println("读取到一条数据:" + data);// 可写入数据库或缓存等}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {System.out.println("所有数据读取完毕");}
}
String fileName = "用户信息.xlsx";
EasyExcel.read(fileName, UserExcel.class, new UserExcelListener()).sheet().doRead();

三、常用注解说明(完整列表)

注解作用
@ExcelProperty(value = "列名", index = 0)设置列名和顺序索引
@DateTimeFormat("yyyy-MM-dd")格式化日期导出
@NumberFormat("#.##")数字格式化导出
@ExcelIgnore忽略该字段
@ColumnWidth(20)设置导出列宽
@ContentStyle(...)设置内容样式(字体、对齐、颜色)
@HeadStyle(...)设置表头样式
@ExcelIgnoreUnannotated类上标注,未标注 @ExcelProperty 的字段不导出
@ExcelImage导出图片
@ExcelEnum(需额外扩展)枚举值转中文等映射(通常结合 Converter 使用)

四、进阶:自定义转换器(Converter)

如:将性别枚举类型转换为字符串
GenderConverter是一个自定义的转换器,结合@ExcelProperty(value = "性别", converter = GenderConverter.class)converter属性,跳转到GenderConverter处理值

public class GenderConverter implements Converter<GenderEnum> {@Overridepublic Class<GenderEnum> supportJavaTypeKey() {return GenderEnum.class;}@Overridepublic CellDataTypeEnum supportExcelTypeKey() {return CellDataTypeEnum.STRING;}@Overridepublic CellData<String> convertToExcelData(GenderEnum value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {return new CellData<>(value.getDesc());}@Overridepublic GenderEnum convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {return GenderEnum.fromDesc(cellData.getStringValue());}
}

然后在实体类中使用:

@ExcelProperty(value = "性别", converter = GenderConverter.class)
private GenderEnum gender;

其它

自定义转换器没生效

要用converter指定
@ExcelProperty(value = “性别”, converter = GenderConverter.class)

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

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

相关文章

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…

AI高考志愿助手应用架构设计并上线实施运行

环境: AI高考志愿助手 问题描述: AI高考志愿助手应用架构设计并上线实施运行 业务需求:开发一个AI升学助手,功能是帮助用户模拟填报高考志愿等功能,数据是历年各专业的录取分数线表格。数据确认: 近3年约100多万条数据,原始数据是excel表格数据。解决方案: 一、项…

深入浅出掌握 Axios(持续更新)

在了解ajax和axios之前&#xff0c;我们先观察一下他们是什么英文的缩写 ajax 的名字为 asynchroanous JavaScript and XML 而axios的名称来源于英文单词“axis”与“I/O”的结合&#xff0c;并非直接缩写自某个特定短语。 先导知识 在本文我们简单的介绍一下ajax后着重讲解…

windows10下搭建nfs服务器

windows10下搭建nfs服务器 有参考这篇博客 Windows10搭建NFS服务 - fuzidage - 博客园 下载 NFS Server这个app 通过网盘分享的文件&#xff1a;nfs1268 (1).exe 链接: https://pan.baidu.com/s/1rE4h710Uh-13kWGXvjkZzw 提取码: mwa4 --来自百度网盘超级会员v5的分享 下载后…

npm符号链接

前言 最近在写一个快应用项目&#xff0c;demo中依赖了本地文件&#xff0c;package.json如下&#xff1a; 此时 node_modules 下出现了 mysdk&#xff0c;复制整个项目&#xff0c;但是copy的项目中的node_modules并未出现该文件&#xff0c;导致报错。 解决方案 观察 pa…

SQL 中 IDENTITY 列的特殊处理.

SQL 处理中,遇到提示: "消息 544,级别 16,状态 1,第 3 行 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 BM 中的标识列插入显式值。" 即当 SQL Server 表中的 ​​标识列(Identity Column)​​ 插入显式值,但未启用 IDENTITY_INSERT 选项。由此报错,以下是详…

网络安全等级保护中关于SSL证书的整改如何处理?

SSL证书在网络安全等级保护&#xff08;等保&#xff09;体系中扮演着至关重要的角色&#xff0c;是实现多个等保核心要求&#xff08;尤其是三级及以上&#xff09;的关键技术手段之一。其重要性主要体现在以下几个方面&#xff1a; 满足“身份鉴别”要求&#xff08;等保要求…

Docker容器化打造elasticsearch8.18.2集群企业实战(含kibana+证书认证)

主机信息 主机配置4Core8GB硬盘大于80GB 主机名IP地址角色10-0-17-12310.0.17.123es-node110-0-17-15810.0.17.158es-node2kibana-15610.0.17.156kibana 一、环境准备 1. 安装 Docker 这里就不介绍如何安装docker了&#xff0c;本文docker版本为20 2. 主机名与网络与内核配置…

JAVA语言的学习(Day_1)

写一个项目并运行&#xff1a; 第一步&#xff1a;新建一个.txt文本。右击点开用Notepad打开&#xff0c;并编辑。 编辑并保存后&#xff0c;可以在文件的查看中&#xff0c;显示出文件的类型&#xff08;eg: .txt / .java)。将txt文本的.txt类型改为.java。 之后在下面的截…

JS 原型与原型链详解

JavaScript 原型与原型链详解 文章目录 JavaScript 原型与原型链详解一、基础概念类1.1 什么是原型&#xff1f;JavaScript 中如何访问一个对象的原型&#xff1f;1.2 构造函数、实例对象和原型对象之间的关系是什么&#xff1f;1.3 prototype 和 **proto** 的区别是什么&#…

DEVICENET转MODBUS TCP网关连接DeviceNet数字远程IO模块配置案例

设备与网络架构&#xff0c;主控设备&#xff1a;支持Modbus TCP协议的PLC&#xff08;如西门子S7-1200&#xff09;。网关设备&#xff1a;开疆智能Modbus TCP转DeviceNet网关KJ-DVCZ-MTCPS&#xff08;需支持DeviceNet从站功能&#xff09;。目标设备&#xff1a;DeviceNet数…

Ubuntu下使用PyTurboJPEG加速图像编解码

目录 一、概述 二、安装PyTurboJPEG 三、测试 一、概述 在计算机视觉领域&#xff0c;图像编解码是绕不开的基础环节。虽然 OpenCV 能解决大部分图像处理问题&#xff0c;但在性能要求严苛的场景下存在短板。本文将介绍基于 libjpeg-turbo 的高效 JPEG 编解码库 PyTurboJPE…

MCU、MPU、GPU、Soc、DSP、FPGA、CPLD……它们到底是什么?

MCU、MPU、GPU、Soc、DSP、FPGA、CPLD…… 这些简称在各大论坛、会议、发布会中屡见不鲜&#xff0c;看到简称&#xff0c;虽然也能说出大概&#xff1b; 但要问具体是什么&#xff1f;用在什么场景&#xff1f;又有什么区别……好像还是差点意思&#xff1b;本篇文章就记录一…

Django RBAC项目后端实战 - 03 DRF权限控制实现

项目背景 在上一篇文章中&#xff0c;我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统&#xff0c;为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…

[网页五子棋][用户模块]数据库设计和配置(MyBatis)、约定前后端交互接口、服务器开发

文章目录 数据库数据库设计配置 MyBatis1. Spring 配置2. 创建实体类3. 创建 Mapper 接口4. 使用 MyBatis 约定前后端交互接口登录接口注册接口获取用户信息 服务器开发loginregistergetUserInfo完整代码 数据库 数据库设计 完成注册登录以及用户分数管理 使用数据库来保存上…

Qt/C++学习系列之列表使用记录

Qt/C学习系列之列表使用记录 前言列表的初始化界面初始化设置名称获取简单设置 单元格存储总结 前言 列表的使用主要基于QTableWidget控件&#xff0c;同步使用QTableWidgetItem进行单元格的设置&#xff0c;最后可以使用QAxObject进行单元格的数据读出将数据进行存储。接下来…

防火墙通常可以分为哪些类型?

防火墙是目前保护网络安全的重要设备&#xff0c;能够通过监控、过滤和控制进出网络的数据流量&#xff0c;来保护内部网络不会受到未经授权的IP地址进行访问和恶意的网络威胁&#xff0c;设置防火墙能够帮助企业确保网络的安全性&#xff0c;同时防火墙也会根据不同的功能来划…

基于GeoTools的道路相交多个点容差冗余计算实战

目录 前言 一、关于道路相交 1、相交四个点 2、点更多的情况 二、基于距离的相交点去重 1、冗余距离计算 2、调用过程 3、去重后的结果 三、总结 前言 在地理信息系统&#xff08;GIS&#xff09;领域&#xff0c;道路网络数据的处理与分析一直是关键课题。随着城市化进…

android:foregroundServiceType详解

在 Android 中&#xff0c;foregroundServiceType 是用于声明前台服务类型的属性&#xff0c;主要从 Android 10&#xff08;API 29&#xff09;开始引入&#xff0c;并在 Android 11&#xff08;API 30&#xff09;及更高版本 中进一步细化。以下是所有可用的 foregroundServi…

React+Taro 微信小程序做一个页面,背景图需贴手机屏幕最上边覆盖展示

话不多说 直接上图 第一步 import { getSystemInfoSync } from tarojs/taro;第二步 render() {const cardBanner getImageUrlByGlobal(member-merge-bg.png);const { safeArea, statusBarHeight } getSystemInfoSync();const NAV_BAR_HEIGHT 44;const navBarHeight NAV…