利用 EasyExcel 实现高效的 Excel 读写操纵

打印 上一主题 下一主题

主题 1019|帖子 1019|积分 3057

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在一样寻常开发中,Excel 文件的读写操纵是一个常见的需求。EasyExcel 是阿里巴巴开源的一个高性能、易用的 Excel 读写库,可以大幅提高处理 Excel 文件的服从。它通过变乱驱动模子优化了大数据量 Excel 的读写性能,非常适合处理大文件或高并发场景。
本篇博客将从 EasyExcel 的根本概念、优势、安装、读写操纵以及高级用法睁开,并提供清楚的代码示例。

一、EasyExcel 的焦点特点


  • 高性能:基于流式解析,低内存消耗,适合大数据量操纵。
  • 简单易用:提供了强大的注解支持,配置简单。
  • 兼容性强:支持 Excel 2007(.xlsx)及更高版本。
  • 变乱驱动模子:按需读取,制止一次性加载所有数据到内存。
  • 支持复杂表头:可以轻松处理多级表头、归并单位格等复杂场景。

二、安装 EasyExcel

起首,在你的 Maven 项目中引入 EasyExcel 的依靠:
  1. <dependency>
  2.     <groupId>com.alibaba</groupId>
  3.     <artifactId>easyexcel</artifactId>
  4.     <version>4.0.3</version> <!-- 请使用最新版本 -->
  5. </dependency>
复制代码

三、根本用法

1. 写入 Excel

以下是一个简单的 Excel 写入示例:
  1. import com.alibaba.excel.EasyExcel;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class EasyExcelWriteExample {
  5.     public static void main(String[] args) {
  6.         String fileName = "example.xlsx";
  7.         // 准备数据
  8.         List<UserData> data = generateData();
  9.         // 写入文件
  10.         EasyExcel.write(fileName, UserData.class)
  11.                 .sheet("用户信息")
  12.                 .doWrite(data);
  13.     }
  14.     private static List<UserData> generateData() {
  15.         List<UserData> list = new ArrayList<>();
  16.         for (int i = 1; i <= 10; i++) {
  17.             list.add(new UserData(i, "用户" + i, "user" + i + "@example.com"));
  18.         }
  19.         return list;
  20.     }
  21.     // 数据类,使用注解指定表头
  22.     public static class UserData {
  23.         @com.alibaba.excel.annotation.ExcelProperty("用户ID")
  24.         private Integer id;
  25.         @com.alibaba.excel.annotation.ExcelProperty("用户名")
  26.         private String name;
  27.         @com.alibaba.excel.annotation.ExcelProperty("邮箱")
  28.         private String email;
  29.         // 构造函数、Getter 和 Setter
  30.         public UserData(Integer id, String name, String email) {
  31.             this.id = id;
  32.             this.name = name;
  33.             this.email = email;
  34.         }
  35.     }
  36. }
复制代码
说明:



  • @ExcelProperty 注解用于指定 Excel 列的标题。
  • EasyExcel.write() 是写操纵的入口,指定文件路径和数据模子。
运行以上代码后,会天生一个名为 example.xlsx 的文件,包含一张标题为“用户信息”的表单。

2. 读取 Excel

以下示例展示怎样读取 Excel 文件内容:
  1. import com.alibaba.excel.EasyExcel;
  2. import com.alibaba.excel.context.AnalysisContext;
  3. import com.alibaba.excel.read.listener.ReadListener;
  4. import java.util.List;
  5. public class EasyExcelReadExample {
  6.     public static void main(String[] args) {
  7.         String fileName = "example.xlsx";
  8.         // 读取文件
  9.         EasyExcel.read(fileName, UserData.class, new UserDataListener())
  10.                 .sheet()
  11.                 .doRead();
  12.     }
  13.     // 自定义监听器,处理每一行数据
  14.     public static class UserDataListener implements ReadListener<UserData> {
  15.         @Override
  16.         public void invoke(UserData data, AnalysisContext context) {
  17.             System.out.println("读取到数据:" + data);
  18.         }
  19.         @Override
  20.         public void doAfterAllAnalysed(AnalysisContext context) {
  21.             System.out.println("所有数据读取完毕");
  22.         }
  23.     }
  24. }
复制代码

四、高级功能

1. 多级表头

EasyExcel 支持复杂的多级表头:
  1. [/code] java
  2. 复制代码
  3. [code]public class MultiLevelData {
  4.     @com.alibaba.excel.annotation.ExcelProperty({"用户信息", "用户ID"})
  5.     private Integer id;
  6.     @com.alibaba.excel.annotation.ExcelProperty({"用户信息", "用户名"})
  7.     private String name;
  8.     @com.alibaba.excel.annotation.ExcelProperty({"联系方式", "邮箱"})
  9.     private String email;
  10. }
复制代码
在写入时,会天生两级表头,分为“用户信息”和“接洽方式”。

2. 大数据量读取

针对大文件,EasyExcel 提供了分批读取的能力。
  1. EasyExcel.read(fileName, UserData.class, new ReadListener<UserData>() {
  2.     @Override
  3.     public void invoke(UserData data, AnalysisContext context) {
  4.         // 处理每一条数据
  5.     }
  6.     @Override
  7.     public void doAfterAllAnalysed(AnalysisContext context) {
  8.         // 处理完成后执行
  9.     }
  10. }).sheet().doRead();
复制代码
通过监听器,每次读取一小部分数据处理,制止内存溢出。

五、利用场景


  • 导出数据报表:支持复杂的表格格式和多级表头,可以天生格式化的报表文件。
  • 批量导入:支持从 Excel 导入数据到数据库,处理高并发上传。
  • 日记分析:处理大文件日记的导入和分析。

六、常见问题


  • 内存溢出:对于大数据量,建议利用分批读取,制止一次性加载过多数据。
  • 日期格式问题:利用 @ExcelProperty 的 converter 属性自界说日期格式。
  • 归并单位格:必要自界说拦截器,控制单位格的样式和归并举动。

七、总结

EasyExcel 是一个功能强大且高效的 Excel 操纵工具。它通过简化代码结构、优化性能和丰富的功能支持,成为 Java 开发者处理 Excel 文件的首选库。通过本篇博客的讲解,相信你已经把握了 EasyExcel 的根本用法和高级功能,可以或许在实际项目中高效处理 Excel 文件。
如果你喜欢这篇文章,请点赞、收藏或分享给更多必要的小伙伴吧!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天空闲话

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表