ExcelReads(简单Excel通用读写器)

ExcelReads是什么?

https://github.com/MatrixSeven/ExcelReads

  • 这是一个通用的简单的Excel读取器
  • 支持自定义JavaBean实体读取和HashMap自动读取
  • 支持自定义扩展
  • 支持自定义Sheet范围,数据开始行数
  • 支持数据库查询直接导出Excel(Map/Object)
  • 支持正则过滤数据格式
  • JavaBean实体支持使用注解添加正则规则校验,HashMap支持数组规则校验
  • 依赖POI,使用Maven构建

更新纪录

更新2017/01/05

  • 修复据库查询的导出(Object)递归越栈问题
  • 增加新的xxx.Class定义类型导出,操作更简单
  • 导出注解支持(自己使用seven.savewapper.anno.ExcelAnno类型注解)

更新2017/01/04

  • 修复据库查询的导出(Map)空指针&下标越界问题
  • 修复在Filter数据后出现空行问题
  • 丢入Result参数后的操作就如同操作Map/Object一样

更新2017/01/01

  • 增加ResExprotDBMap&ResExprotDBObj用于支持数据库导出
  • 支持基于数据库查询的导出(Map),直接放入Result对象即可
  • 支持基于数据库查询的导出(Object),直接放入Result对象即可

更新2016/11/30

  • 增加了简单类型得写入,生成xls/xlsx
  • 直接JavaBean类型写入,注解命名
  • 支持Map key-value类型写入
  • 写入时支持和读取一样得过滤加工排序等写法

更新2016/11/29

  • 增加CreateMap By Key
  • 去除无用泛型
  • 增加xlsx支持

更新2016/11/8

  • 支持数据过滤和处理是转换,基于事件模式
  • 更新为Build模式创建实例
  • 增加数据过滤、数据转换和数据排序回调接口
  • 采用链式set方式进行

其他

  • 自定义读取支持出简单的规范化数据格式,即典型的表头格式
  • 可以继承 WapperMap 和 WapperObj进行扩展
  • 直接使用ExcelFactory.getBeans进行获取,WapperObj则自己添加泛型
  • 注解Value对应列标题,Required对应正则,可自己写正则表达式或者直接使用RegHelper
  • 实体bean数据要比hashMap慢,7w条数据慢800ms,加入正则减慢速度(测试中加入了正则)

使用方法说明

  1. 本程序只能读取简单格式的xls文件,文件布局如下(标准的行列结构):
标题1 标题2 标题3
foo foo foo
bar bar bar
baz baz baz

数据库导出自定义Bean类型写法(xxx.Class类型)

ExcelFactory.saveExcel(UNPOOLED_DATA_SOURCE.getConnection().prepareStatement("select * FROM  users_info limit 1000").executeQuery(),"\u5317\u4eac__Excel.xlsx",AS.class).FilterCol(() -> new String[]{"updatetime"}).Filter((AS o) ->o.getA().length() > 3).Save();

数据库导出自定义Bean类型写法(自己实现包装)

ExcelFactory.saveExcel(UNPOOLED_DATA_SOURCE.getConnection().prepareStatement("select * FROM  users_info limit 1000").executeQuery(),"\u5317\u4eac__Excel.xlsx",res -> {AS a = new AS();a.setA(res.getString("name"));return a;}).FilterCol(() -> new String[]{"updatetime"}).Filter((AS o) ->o.getA().length() > 3).Save();

数据库直接导出到Excel例子

ExcelFactory.saveExcel(UNPOOLED_DATA_SOURCE.getConnection().prepareStatement("select * FROM  users_info limit 10000").executeQuery(), "知乎导出Excel.xlsx")//过滤字段.FilterCol(() -> new String[]{"updatetime"})//过滤数据条件.Filter((HashMap<String, String> o) ->o.get("address").equals("\u5317\u4eac")).Save();

自定义类型导出到Excel例子

List<A> aa = new ArrayList<>();
aa.add(new A("a", "b"));
aa.add(new A("aa", "bb"));
ExcelFactory.saveExcel(aa,System.getProperty("user.dir").concat("\\Save.xlsx"))///这里能够处理每一行数据.Process((A a) -> a.setA("xxxxxxx"))//过滤列.FilterCol(() -> new String[]{"B"})//根据某个字段来处理数据时候丢弃.Filter((A a) -> a.getA().length() > 1)//排序.Sort((A o1,A o2 ) -> o1.getAge()>o2.getAge()?1:o1.getAge()==o2.getAge()?0:-1).Save();

读取Excel到Map例子

 List<Map<String,String>> data=ExcelFactory.getBeans(System.getProperty("user.dir").concat("\\测试.xls"),new ResWrapperMap() {@Override//配置Excel属性protected void LoadConfig(Config config) {config.setContent_row_start(3);config.setTitle_row(2);}}).//这里能够处理每一行数据Process((HashMap<String, String> o) -> System.out.println(o + "\n")//这里能够处理时候过滤某一列).FilterCol(() -> new String[]{}//这里能根据某一行的某一列的内容来取舍这行数据).Filter((HashMap<String, String> o) -> o.get("创建人") != null && o.get("创建人").length() > 5//排序).Sort((o1, o2) -> o1.hashCode()>o2.hashCode()?1:hashCode()==o2.hashCode()?0:-1).Create();//使用 .CreateMap(key_v) 生成Map<Key,Map>类型数据

读取Excel到自定义类型的例子

Map<String,Seven> map=new ResWrapperObj(Seven) {@Overrideprotected void LoadConfig(Config config) {config.setContent_row_start(3);config.setTitle_row(2);}}).Process((HashMap<String, String> o) -> {}).FilterCol(() -> new String[]{}).Filter((HashMap<String, String> o) -> o.get("创建人") != null &&o.get("创建人").length() > 4).<Map>CreateMap("创建人"));

## 效果

实体类截图

继承关系

  • 邮件(hacker.kill07@gmail.com)
  • QQ: 985390927
  • weibo: @Alden_情绪控
  • Blog: http://sweets.cf

【造轮子/更新】打造一个简单的万能Excel读写工具相关推荐

  1. 【造轮子】打造一个简单的万能Excel读写工具

    大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...

  2. 动手造轮子:实现一个简单的依赖注入(一)

    动手造轮子:实现一个简单的依赖注入(一) Intro 在上一篇文章中主要介绍了一下要做的依赖注入的整体设计和大概编程体验,这篇文章要开始写代码了,开始实现自己的依赖注入框架. 类图 首先来温习一下上次 ...

  3. 动手造轮子:实现一个简单的基于 Console 的日志输出

    动手造轮子:实现一个简单的基于 Console 的日志输出 Intro 之前结合了微软的 Logging 框架和 Serilog 写了一个简单的日志框架,但是之前的用法都是基于 log4net.ser ...

  4. 动手造轮子:实现一个简单的依赖注入(二) --- 服务注册优化

    动手造轮子:实现一个简单的依赖注入(二) --- 服务注册优化 Intro 之前实现的那版依赖注入框架基本可用,但是感觉还是不够灵活,而且注册服务和解析服务在同一个地方感觉有点别扭,有点职责分离不够. ...

  5. 动手造轮子:实现一个简单的依赖注入(零)

    动手造轮子:实现一个简单的依赖注入(零) Intro 依赖注入为我们写程序带来了诸多好处,在微软的 .net core 出来的同时也发布了微软开发的依赖注入框架 Microsoft.Extension ...

  6. 动手造轮子:实现一个简单的 EventBus

    动手造轮子:实现一个简单的 EventBus Intro EventBus 是一种事件发布订阅模式,通过 EventBus 我们可以很方便的实现解耦,将事件的发起和事件的处理的很好的分隔开来,很好的实 ...

  7. 打造一个简单的万能适配器

    将优化后的BaseAdapter封装成一个通用的万能适配器,第一次的封装还不够完善,以后将改进和优化. package com.xspacing.commonadapter;import java.u ...

  8. 动手造轮子:写一个日志框架

    动手造轮子:写一个日志框架 Intro 日志框架有很多,比如 log4net / nlog / serilog / microsoft.extensions.logging 等,如何在切换日志框架的时 ...

  9. 因为造轮子,我一个月就转正了 | 原力计划

    作者 | Baldwin_KeepMind 责编 | 伍杏玲 出品 | CSDN博客 2019年6月,我通过社招入职现在所工作的公司,理论上应该有三个月时间的试用期,只有试用期表现良好我才有机会转正, ...

最新文章

  1. 每日一题(字符串拆分)
  2. insert into 时间_2021国家公务员考试报名时间_国考什么时候报名
  3. Ubuntu安装apache+Yii2
  4. 休眠面试问答-最终清单
  5. React - S1
  6. 飞鸽传书2007绿色版的发展
  7. Python 用for循环实现猜数字游戏
  8. centos mysql无法启动 sock_【零基础学云计算】MYSQL的主从复制、读写分离
  9. 区块链基础语言(二)——Go语言开发环境搭建
  10. StringUtils测试
  11. [Android] 查看MTD,EMMC,MMC三种设备的分区
  12. chmod命令用法linux,Linux下chmod命令详细介绍及用法举例
  13. html5小游戏代码-2048游戏
  14. RainMeter使用教程一篇
  15. sqlite报错database is locked
  16. python 马赛克还原_卷积神经网络教你如何还原被马赛克的文本图像
  17. matlab chan算法定位,求Chan算法解析
  18. Go实现md5加密方法
  19. CTF-代码审计(2)
  20. 解读小红书2022年母婴行业报告:心智种草的流量密码

热门文章

  1. 与mysql类似的数据库_目前主流的数据库是哪种?
  2. vvic/搜款网API接口(item_get-根据ID取商品详情)
  3. html 制作人物模型,3dsmax动漫人物制作教程
  4. 判断一句话是否中文或者英文
  5. win7快捷键_?如何用U盘安装win7系统?
  6. java 新浪 发送邮件_使用javamail新浪郵箱發送遇到的問題(已解決)
  7. 四大天王 -- ContentProvider
  8. HDU 1718 Rank counting sort解法
  9. 使用C#调用德卡 T10读卡器获取医保卡信息
  10. 20181027解题报告