• https://github.com/liuhuagui/gridexcel

GridExcel是基于Java8函数式编程和POI EventModel实现的用于Excel简单读写的通用解决方案。


GridExcel基于Java8函数式编程使用Lambda表达式来处理Excel的读写逻辑。就像这样:

/*** 业务逻辑处理方式三选一:* 1.启用windowListener,并将业务逻辑放在该函数中。* 2.不启用windowListener,使用get()方法取回全部数据集合,做后续处理。* 3.readFunction函数,直接放在函数中处理 或 使用final or effective final的局部变量存放这写数据,做后续处理。* 注意:使用EventModel时readFunction函数的输入为每行的cell值集合List<String>。* @throws Exception*/@Testpublic void readXlsxByEventModel() throws Exception {InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("2007.xlsx");GridExcel.readByEventModel(resourceAsStream,TradeOrder.class,ExcelType.XLSX).window(2,ts -> System.out.println(JSON.toJSONString(ts)))//推荐在这里执行自己的业务逻辑.process(cs ->{TradeOrder tradeOrder = new TradeOrder();tradeOrder.setTradeOrderId(Long.valueOf(cs.get(0)));Consultant consultant = new  Consultant();consultant.setConsultantName(cs.get(3));tradeOrder.setConsultant(consultant);tradeOrder.setPaymentRatio(cs.get(16));return tradeOrder;},1);}/*** 使用Streaming UserModel写出数据到Excel* @throws Exception*/@Testpublic void writeExcelByStreaming() throws Exception {GridExcel.writeByStreaming(TradeOrder.class).head(writeFunctionMap())//对象字段到Excel列的映射.createSheet().process(MockData.data())//模拟数据。在这里设置业务数据集合。.write(FileUtils.openOutputStream(new File("/excel/test.xlsx")));}

具体代码可参考:

  • https://github.com/liuhuagui/gridexcel/blob/master/src/test/java/ReadTest.java
  • https://github.com/liuhuagui/gridexcel/blob/master/src/test/java/WriteTest.java

将业务逻辑写在Lambda表达式中,像下面这样:

(业务对象)-> {编写处理逻辑...}
  • 这种形式很像是用匿名对象实现回调函数,但是Java8的Lambda是基于第五条字节码指令invokeDynamic
    实现的,更加轻量,性能更高。
  • 同时,比起匿名对象没有复杂的垂直结构,代码更简洁,更容易理解。
  • 解析逻辑放在代码块里,允许用户随意操作(更加直观,一眼就能看出处理逻辑,代码可阅读性更强),比如:
    • 只导出或导入某些列
    • 复杂对象处理
    • 条件判断处理
  • 解析逻辑都直接定义在代码块里了,所以使用GridExcel不需要复杂的注解没有额外的学习成本更没有代码侵入
  • 同理,GridExcel不需要对实体类进行注解,无代码侵入,同时也意味着对Excel的读写逻辑完全可以不需要实体类

无实体类读写Excel

   /*** No Entity无实体类读Excel文件* 业务逻辑处理方式三选一:* 1.启用windowListener,并将业务逻辑放在该函数中。* 2.不启用windowListener,使用get()方法取回全部数据集合,做后续处理。* 3.readFunction函数,直接放在函数中处理 或 使用final or effective final的局部变量存放这写数据,做后续处理。* 注意:使用EventModel时readFunction函数的输入为每行的cell值集合List<String>。* @throws Exception*/@Testpublic void readXlsxByEventModelWithoutEntity() throws Exception {InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("2007.xlsx");GridExcel.readByEventModel(resourceAsStream,Map.class,ExcelType.XLSX).window(2,ts -> System.out.println(JSON.toJSONString(ts)))//推荐在这里执行自己的业务逻辑.process(cs ->{Map<String, Object> map = new HashMap<String, Object>();map.put("tradeOrderId",cs.get(0));map.put("consultantName",cs.get(3));map.put("paymentRatio",cs.get(16));return map;},1);}

由于没有自定义业务实体类,这里我们可以使用Map.class来代替。上面是读入Excel的例子,写Excel可以参照实现。

开源工具 — GridExcel支持无实体类读写Excel文件相关推荐

  1. GridExcel支持无实体类读写Excel文件

    https://github.com/liuhuagui/gridexcel GridExcel是基于Java8函数式编程和POI EventModel实现的用于Excel简单读写的通用解决方案. G ...

  2. php循环读取excel每个单元格,php使用PHPexcel类读取excel文件(循环读取每个单元格的数据)...

    error_reporting(E_ALL); date_default_timezone_set('Asia/ShangHai'); include_once('Classes/PHPExcel/I ...

  3. Alibaba开源工具EasyExcel读写Excel文件

    前言 工作中使用 excel 表格处理数据是很常见的操作,经常会使用 excel 文件来导入数据或者导出数据,是不是脑海中已经思考有哪些处理excel框架? 小编之前呢就知道Java 解析.生成 Ex ...

  4. java读写excel文件poi_Java利用POI读写Excel文件工具类

    本文实例为大家分享了Java读写Excel文件工具类的具体代码,供大家参考,具体内容如下 package com.test.app.utils; import java.io.File; import ...

  5. 基于POI的读写Excel文件的工具类

    依赖的jar包: import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStrea ...

  6. dao和mysql映射_hibernate通过数据库生成实体类,映射文件和DAO(实用)

    hibernate通过数据库生成实体类,映射文件和DAO(实用) (2011-04-06 17:22:32) 标签: 杂谈 上次谈到利用MyEclipse从数据库反向生成实体类之JPA方式,这次我们来 ...

  7. mybatis根据表逆向自动化生成代码(自动生成实体类、mapper文件、mapper.xml文件)

    若采用mybatis框架,数据库新建表,手动编写的话,需要编写大量的实体类.mapper文件.mapper.xml文件,都是一些重复且有规律的工作. 我们可以引用插件,然后做配置,自动生成这些文件,提 ...

  8. java实体类转换xml_简单实体类和xml文件的相互转换方法

    最近写一个题目,要求将一组员工实体类转换成xml文件,或将xml文件转换成一组实体类.题目不难,但写完感觉可以利用泛型和反射将任意一个实体类和xml文件进行转换.于是今天下午立马动手 试了下,做了个简 ...

  9. 实体类,bean文件,pojo文件夹,model文件夹都一样

    实体类,bean文件,pojo文件夹,model文件夹都一样,这些都是编写实体类,这是我暂时看到的项目文件 转载于:https://www.cnblogs.com/dianzan/p/11181196 ...

最新文章

  1. PAT甲级1124 Raffle for Weibo Followers :[C++题解]哈希表、微博转发抽奖
  2. A Router may have only one child element
  3. android xml引用系统资源文件,android开发教程之系统资源的使用方法 android资源文件...
  4. 今晚直播 | 强化学习在比赛和自动机器学习中的应用简析
  5. zabbix监控oracle缓冲区,Zabbix监控oracle各服务器连接数
  6. 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----ICMP篇
  7. 【OpenCV学习】OpenMP并行化实例
  8. 关于“最终”的最终决定
  9. Leetcode 124.二叉树中的最大路径
  10. fastboot devices 找不到设备_处理工业废气找不到好设备?您应该了解一下工业静电油烟净化器...
  11. JavaScript数据类型之比较运算符(8)
  12. Linux内存分配器SLOB,深入理解Linux内核之SLOB分配器
  13. 使用Python开发游戏运行脚本(三)图片查找
  14. 亡羊补牢为时未晚,网络安全从现在做起
  15. vue 文件.eslintrc.js 配置规则
  16. word to vector 文本向量化
  17. 2022年进口葡萄酒市场分析
  18. 【20保研】北京航空航天大学网络空间安全学院 “2019年暑期优秀大学生夏令营”活动通知...
  19. 网站建设与管理的基本概念
  20. 荣耀有鸿蒙手机吗,鸿蒙系统支持名单曝光,这些华为/荣耀可以升级,有你的手机吗?...

热门文章

  1. postfix增加发件人,以及发件人用户名显示
  2. 排除Windows XP无法启动故障
  3. LeetCode的坑
  4. sqlyon社区版_SQLyog社区版下载 SQLyog Community(SQL数据库管理软件) V11.2 官方免费多语言中文安装版 32位 下载-脚本之家...
  5. java redis快速入门_快速入门Redis系列(3)——Redis的JavaAPI操作(附带练习)
  6. eclipse如何点击png或者jpg格式图片就能预览
  7. html页面加密教程,DRM-X 4.0 HTML网页加密教程
  8. 【UE Sequencer系列】05-解决角色动画造成的位移问题
  9. 学习笔记5-MPU6050模块
  10. Javaweb微专业笔记开山篇---开发环境的搭建