• 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可以参照实现。

转载于:https://my.oschina.net/51Bigod/blog/3089176

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. java读写excel文件poi_Java利用POI读写Excel文件工具类

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

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

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

  5. VS2010 MFC通过OLE方式读写Excel文件(实例+工程文件)

    最近一个同学说是要做一个报账的软件,总体上要实现的功能就是读写Excel文件,于是自己就开始在网上找读写Excel的方法,首先看到了C/C++读写Excel的几种方法,说是读写的方法有很多,但是反正就 ...

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

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

  7. 使用EasyExcel读写Excel文件

    笔者之前一直使用POI读写Excel文件,最近有个需求需要读取大概80万行数据的Excel,使用POI读取到10.2万行左右就卡死不动了,而且CPU占用直接拉满到100%,内存占用也很高. 查找资料后 ...

  8. 阿里EasyExcel读写excel文件的基本使用

    EasyExcel读写excel文件 1.EasyExcel简介 2.对excel的写操作 1.1 创建一个普通的maven项目并引入相关依赖 1.2 创建实体类 1.3 实现写操作 1.3.1 创建 ...

  9. python怎么读excelsheet_python3 excle(python怎么读写excel文件)

    python读取已经打开的3个word和excle文件的路径 用 win32com 操控 word和Excel就可以实现 咋样把python写入excle中 # 需安装 xlrd-0.9.2 和 xl ...

最新文章

  1. 什么是物联网网关?物联网网关具备什么功能?_转
  2. 有了这几个神器,瞬间逼格就上去了
  3. gvim 二进制_vim/gvim学习
  4. C语言 —— 把字符指针中的字符串,存入字符数组中
  5. C语言 枚举,进制,原码,反码,补码,移码,结构体
  6. (fofa信息收集骚操作)windows查看文件的md5值
  7. python计算复制比_vbs实现只复制比目标文件更新的文件
  8. 搭建企业分支机构(单域多站点)虚拟网络之W2k3 (一) 初稿
  9. [Python] L1-001. Hello World-PAT团体程序设计天梯赛GPLT
  10. python白鹅类型_fluent python 11.10节 鹅的行为有可能像鸭子
  11. excel 自动获得拟合系数,自动引用,计算
  12. 求最大李雅普诺夫指数(Largest Lyapunov Exponents,LLE)的 Rosenstein 算法
  13. ​以太网的发展历史、演化过程以及工作基理
  14. python端口扫描|C++ 扫描端口|编程实现端口扫描器|扫描指定端口
  15. 2.灰尘对计算机的影响,灰尘对电脑有影响不?
  16. 【Java】【MySnake】仿贪吃蛇小游戏开源代码(持续更新)
  17. 多线程与并发系列之CompletableFuture
  18. Exploratory Social Network Analysis with Pajek(第三版)8
  19. 【热门收藏】iOS开发人员必看的精品资料(100个) ...
  20. vue拦截器刷新登陆页面_Vue + Spring Boot 项目实战(六):前端路由与登录拦截器-Go语言中文社区...

热门文章

  1. 玩吃鸡游戏哪个耳机好?2022年TWS耳机推荐
  2. python 梦幻西游手游脚本_梦幻西游手游抢怪有什么技巧 梦幻西游抢怪技巧
  3. 阿里,华为,腾讯,小米2017实习面试经历
  4. 工业物联网网关助力红外线远程测温系统
  5. EMNLP2020 | 近期必读Natural Language Inference精选论文
  6. 大三小白的产品实习经历总结
  7. Java实现奇偶数排序
  8. java中遍历数组方法
  9. ISO 14067 中英文.pdf
  10. 巴菲特致股东的一封信:1986年