easyexcel

本文详细介绍了EasyExcel的核心类,如入口类、读写构造器及工作表对象,以及读写监听器和处理器。此外,还探讨了常用的注解,如@ExcelProperty、@ExcelIgnore和@DateTimeFormat,以及读写过程中的通用参数设置,如转换器、监听器和数据处理选项。通过实例解析,帮助读者深入理解EasyExcel在Excel数据操作中的应用。

1.常用类
EasyExcel 入口类,用于构建各种对象,开始各种操作
ExcelReaderBuilder 构建出一个ReadWorkbook对象,即一个工作簿对象,对应的是一个Excel文件
ExcelWriterBuilder 构建出一个 WriteWorkbook对象,即一个工作簿对象,对应的是一个Excel文件
ExcelReaderSheetBuilder 构建出一个ReadSheet对象,即一个工作表对象,对应的Excel文件中的每个sheet,一个工作簿可以 有多个工作表
ExcelWriterSheetBuilder 构建出一个WriteSheet对象,即一个工作表对象,对应的Excel文件中的每个sheet,一个工作簿可以 有多个工作表
ReadListener 在每一行读取完毕之后都会调用ReadListener来处理数据,我们可以把调用service的代码可以写在invoke方法的内部
WriteHandler 在每一个操作包括创建单元格,创建表格等都会调用writeHandler来处理数据,对使用者透明不可见
所有配置都是继承的 workbook的配置会被sheet继承,所以在使用EasyExcel设置参数的时候,在EasyExcel…sheet()方法之前作用域都是整个workBook的所有sheet,之后针对单个sheet

2.常用注解
@ExcelProperty
作用在成员变量上,把实体类中属性和excel 表中列关联起来
属性:

属性名含义
index对应excel表中的列数
value对应excel表中的列头
converter成员变量转换器

效果:index属性可以指定当前字段对应excel中的哪一列,可以根据列名value去匹配,也可以不写。如果不使用该注解,成员变量从上到下的顺序,对应表格中从左到右的顺序。
要么全部不写,要么全部使用index,要么用value去匹配,不要混着使用

@ExcelIgnore
标注在成员变量上,默认所有字段都会和excel进行匹配,除了被该注解注释的字段

@DateTimeFormat
标注在成员变量上,日期转换,代码中用String类型的成员变量去接受excel中日期格式的数据会调用这个注解,
3.通用参数
ReadWorkbook,ReadSheet 都会有的参数,如果为空,默认使用上级。

● converter 转换器,默认加载了很多转换器。也可以自定义。
● readListener 监听器,在读取数据的过程中会不断的调用监听器。
● headRowNumber 需要读的表格有几行头数据。默认有一行头,也就是认为第二行开始起为数据。
● head 与clazz二选一。读取文件头对应的列表,会根据列表匹配数据,建议使用class。
● clazz 与head二选一。读取文件的头对应的class,也可以使用注解。如果两个都不指定,则会读取全部数据。
● autoTrim 字符串、表头等数据自动trim
● password 读的时候是否需要使用密码

### EasyExcel 使用指南与常见问题 #### 易于使用的 Java Excel 处理库 EasyExcel 是由阿里巴巴开源的一款高效、轻量级的 Excel 读写工具,相较于传统方式(如 Apache POI),它具有更低的内存消耗和更高的性能表现,尤其适合处理大规模数据场景[^2]。 以下是关于 EasyExcel 的一些核心功能及其使用方法: --- #### 基本概念与环境准备 为了使用 EasyExcel,需先引入 Maven 依赖项。以下是一个典型的配置示例: ```xml <dependency> <groupId>com.alibaba.easyexcel</groupId> <artifactId>easyexcel</artifactId> <version>3.0.5</version> </dependency> ``` 确保版本号与项目的 JDK 版本兼容。如果项目中涉及复杂的 Excel 表格结构,则可能还需要额外的依赖支持。 --- #### 写入 Excel 文件 EasyExcel 提供了一种简单的方式用于向 Excel 中写入数据。以下是一段完整的代码示例,展示了如何将自定义对象列表写入到 Excel 文件中: ```java import com.alibaba.excel.EasyExcel; public class WriteExample { public static void main(String[] args) { String fileName = "output.xlsx"; // 准备要写入的数据 List<UserInfo> data = new ArrayList<>(); data.add(new UserInfo("Alice", 25)); data.add(new UserInfo("Bob", 30)); // 调用 EasyExcel.write() 方法完成写入操作 EasyExcel.write(fileName, UserInfo.class).sheet("Sheet1").doWrite(data); } } // 定义实体类 class UserInfo { private String name; private int age; public UserInfo(String name, int age) { this.name = name; this.age = age; } // Getters and Setters (省略) } ``` 此代码片段实现了将 `UserInfo` 对象集合写入名为 `"output.xlsx"` 的文件中的逻辑[^3]。 --- #### 读取 Excel 文件 对于读取操作,EasyExcel 支持多种模式,包括同步读取和基于事件驱动的异步读取。后者特别适用于大文件场景下的资源优化管理。 ##### 同步读取 当目标文件较小或者无需实时处理时,可以采用如下方式进行同步读取: ```java import com.alibaba.excel.EasyExcel; public class SyncReadExample { public static void main(String[] args) { String fileName = "input.xlsx"; List<UserInfo> result = EasyExcel.read(fileName, UserInfo.class, null) .sheet() .headRowNumber(1) // 如果存在表头跳过首行 .doReadSync(); System.out.println(result); } } ``` ##### 异步读取(推荐) 针对超大型文件,建议实现一个继承自 `AnalysisEventListener<T>` 的监听器来逐条处理记录: ```java import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; public class CustomListener extends AnalysisEventListener<UserInfo> { @Override public void invoke(UserInfo userInfo, AnalysisContext context) { // 单条数据到达后的回调函数 System.out.println(userInfo); } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 所有数据解析完成后执行的操作 System.out.println("Finished reading all rows."); } } ``` 随后,在主程序中调用该监听器即可完成异步读取过程[^4]。 --- #### 解决常见问题 尽管 EasyExcel 功能强大,但在实际开发过程中仍可能出现某些异常情况。以下是几个典型例子以及对应的解决办法: 1. **读取结果为空** 当发现最终返回的结果集为空时,请确认以下几个方面是否存在错误: - 是否正确指定了 Sheet 名称或索引; - 数据模型字段名是否严格匹配表格列标题; - 若启用了注解映射机制,则还需核对其标注的一致性[^5]。 2. **内存溢出** 在面对海量数据的情况下,默认策略可能会引发 OOM 错误。此时应切换至分页加载模式,并配合监听器逐步消费每批次数据。 3. **日期格式不一致** 不同区域设置可能导致时间戳显示差异显著。可以通过调整全局参数统一控制输出样式。 --- #### 总结 综上所述,EasyExcel 可谓是一款兼具灵活性与效率优势的强大工具,无论是在日常办公自动化领域还是企业后台管理系统建设当中均有着广泛的应用前景。掌握其基本语法之后便可迅速投入到实战环节之中去实践探索更多可能性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值