来源

项目需要把Excel进行解析,并映射到对象属性,实现类似Mybatis的ORM的效果。使用的方式是自定义注解+POI,这种方式代码复杂而且不易于维护。

easyexcel是阿里巴巴开源的一个框架,解决了字段映射问题、OOM问题、使用复杂问题等,总之是一个很方便的工具

GitHub链接

使用

添加依赖

  1. <!--添加maven依赖-->
  2. <!--easyexcel-->
  3. <dependency>
  4. <groupId>com.alibaba</groupId>
  5. <artifactId>easyexcel</artifactId>
  6. <version>2.1.3</version>
  7. </dependency>
  8. <!--fastjson-->
  9. <dependency>
  10. <groupId>com.alibaba</groupId>
  11. <artifactId>fastjson</artifactId>
  12. <version>1.2.62</version>
  13. </dependency>
  14. <!--lombok-->
  15. <dependency>
  16. <groupId>org.projectlombok</groupId>
  17. <artifactId>lombok</artifactId>
  18. <version>1.18.10</version>
  19. <scope>provided</scope>
  20. </dependency>

准备excel

准备实体

  1. @Data
  2. public class Student {
  3. /**
  4. * 也可以使用@ExcelProperty(index = 2) 指定列数
  5. * 官方不建议 index 和 name 同时用,要么一个对象只用index,要么一个对象只用name去匹配
  6. */
  7. @ExcelProperty("姓名")
  8. private String name;
  9. @ExcelProperty("学号")
  10. private String stuId;
  11. @ExcelProperty("班级")
  12. private String classId;
  13. }

创建监听器

  1. public class DemoDataListener extends AnalysisEventListener<Student> {
  2. private List<Student> list = new LinkedList<Student>();
  3. /**
  4. * 这个每一条数据解析都会来调用
  5. * @param student
  6. * @param analysisContext
  7. */
  8. public void invoke(Student student, AnalysisContext analysisContext) {
  9. System.out.println("读取到一条数据 " + JSON.toJSONString(student));
  10. list.add(student);
  11. }
  12. /**
  13. * 所有数据读取完了调用
  14. * @param analysisContext
  15. */
  16. public void doAfterAllAnalysed(AnalysisContext analysisContext) {
  17. System.out.println("读取完毕 所有数据 " + JSON.toJSONString(list));
  18. }
  19. }

读取

  1. public class Main {
  2. public static void main(String[] args) {
  3. String fileName = "D:\\1.xlsx";
  4. ExcelReader excelReader = EasyExcel.read(fileName, Student.class, new DemoDataListener()).build();
  5. ReadSheet readSheet = EasyExcel.readSheet(0).build();
  6. excelReader.read(readSheet);
  7. // 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的
  8. excelReader.finish();
  9. }
  10. }

结果

其他问题

如果第一行不是表头,而是像以下数据怎么办呢



很简单只需要设置readSheetheadRowNumber即可

  1. public class Main {
  2. public static void main(String[] args) {
  3. String fileName = "D:\\1.xlsx";
  4. ExcelReader excelReader = EasyExcel.read(fileName, Student.class, new DemoDataListener()).build();
  5. ReadSheet readSheet = EasyExcel.readSheet(0).headRowNumber(2).build();
  6. excelReader.read(readSheet);
  7. // 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的
  8. excelReader.finish();
  9. }
  10. }

其他复杂表格请参考

官网文档

Excel映射到实体-easyexcel工具的更多相关文章

  1. Excel解析easyexcel工具类

    Excel解析easyexcel工具类 easyexcel解决POI解析Excel出现OOM <!-- https://mvnrepository.com/artifact/com.alibab ...

  2. ORM框架-VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】4.5

    摘要:VB/C#.Net实体代码生成工具(EntitysCodeGenerate)[ECG]是一款专门为.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的程序代码基于OO.ADO.N ...

  3. C#.Net实体代码生成工具(EntitysCodeGenerate)的使用及.NET中的ORM实现

    1 引言 目前大多数项目或产品都使用关系型数据库实现业务数据的存储,这样在开发过程中,常常有一些业务逻辑需要直接用写SQL语句实现,但这样开发的结果是:遍地布满SQL语句.这些藕合较高的SQL语句给系 ...

  4. Java实现导入导出Excel:POI和EasyExcel

    文章与CSDN同步,欢迎访问:https://blog.csdn.net/qq_40280582/article/details/107300081 代码地址:https://gitee.com/il ...

  5. 史上最全的Excel导入导出之easyexcel

    喝水不忘挖井人,感谢阿里巴巴项目组提供了easyexcel工具类,github地址:https://github.com/alibaba/easyexcel 文章目录 环境搭建 读取excel文件 小 ...

  6. 一行code实现ADO.NET查询结果映射至实体对象。

    AutoMapper是一个.NET的对象映射工具. 主要用途 领域对象与DTO之间的转换.数据库查询结果映射至实体对象. 这次我们说说 数据库查询结果映射至实体对象. 先贴一段代码: public S ...

  7. 在线数据库表(sql语句)生成java实体类工具

    相信每个做java开发的读者,都接触过SQL建表语句,尤其是在项目开发初期,因为数据库是项目的基石. 在现代项目开发中,出现了许多ORM框架,通过简单的实体映射,即可实现与数据库的交互,然而我们最初设 ...

  8. C#7.2——编写安全高效的C#代码 c# 中模拟一个模式匹配及匹配值抽取 走进 LINQ 的世界 移除Excel工作表密码保护小工具含C#源代码 腾讯QQ会员中心g_tk32算法【C#版】

    C#7.2——编写安全高效的C#代码 2018-11-07 18:59 by 沉睡的木木夕, 123 阅读, 0 评论, 收藏, 编辑 原文地址:https://docs.microsoft.com/ ...

  9. Aspose 强大的服务器端 excel word ppt pdf 处理工具

    Aspose 强大的服务器端 excel word ppt pdf 处理工具 http://www.aspose.com/java/word-component.aspx

随机推荐

  1. 告别编码5分钟,命名2小时!史上最全的Java命名规范参考!

    简洁清爽的代码风格应该是大多数工程师所期待的.在工作中笔者常常因为起名字而纠结,夸张点可以说是编程5分钟,命名两小时!究竟为什么命名成为了工作中的拦路虎. 每个公司都有不同的标准,目的是为了保持统一, ...

  2. 《手把手教你》系列练习篇之8-python+ selenium自动化测试 -压台篇(详细教程)

    1. 简介 本文是练习篇的最后一篇文章,虽然练习篇的文章到此就要和大家说拜拜了,但是我们的学习之路才刚刚开始.不要停下你的脚步,大步朝前走吧!比你优秀的人还在走着,我们有什么理由停下自己的脚步了,生命 ...

  3. 索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!

    前言 Hello我又来了,快年底了,作为一个有抱负的码农,我想给自己攒一个年终总结.自上上篇写了手动搭建Redis集群和MySQL主从同步(非Docker)和上篇写了动手实现MySQL读写分离and故 ...

  4. Numpy的基础用法

    1.用Numpy创建数组 numpy.array(object):创建数组,与array.array(typecode[, initializer])不同,array.array()只能创建一维数组 ...

  5. 用正则表达式来验证QQ号是否合法

    import re #首先我们定义一个函数利用正则表达式来获取QQ号 def testQQ(qq): pattern = re.compile('[1-9][0-9]{4,10}$') result ...

  6. luogu P1908 逆序对 |树状数组

    题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计.最近,TOM老猫查阅到一个人类称之为"逆序对"的 ...

  7. CocoaPods 详解之----更新篇

    CocoaPods 大概是 2011 年出现的开源组件管理工具(目前已支持 Objective-C 和 Swift),近年来普及率越来越高,几乎已是所有 Cocoa 开源项目的标配.另外,很多大点的团 ...

  8. react-native-linear-gradient颜色渐变

    目录 一 安装 二 使用 2.1 colors 2.2 start / end eg1:斜角渐变 eg2: 从左到右 2.2 locations eg1: 0.4是渐变的起点,0.6是渐变的终点 一 ...

  9. UVA-156

    Most crossword puzzle fans are used to anagrams - groups of words with the same letters in different ...

  10. POJ3111

    Demy has n jewels. Each of her jewels has some value vi and weight wi. Since her husband John got br ...