大家工作或者平时是不是经常遇到要读写一些简单格式的Excel?

shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下。

厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式操作?来~,喜欢用lambda(虽然java的比较蛋疼~),来~看这个~

哈哈,如果你用的不是java8~~没问题,那就默默地用老方式匿名类来实现这些功能吧,但是这并不妨碍您的使用哈哈~~~

更新多次~希望大家也能够集思广益~

github地址:https://github.com/MatrixSeven/ExcelReads

欢迎大家fork,欢迎大家Star,更欢迎大家多提意见or建议,提供更好的想法~~

ExcelReads(简单Excel通用读写器)

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) {
@Override
protected 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("创建人"));

【造轮子】打造一个简单的万能Excel读写工具的更多相关文章

  1. 动手造轮子:实现简单的 EventQueue

    动手造轮子:实现简单的 EventQueue Intro 最近项目里有遇到一些并发的问题,想实现一个队列来将并发的请求一个一个串行处理,可以理解为使用消息队列处理并发问题,之前实现过一个简单的 Eve ...

  2. [.NET] 一步步打造一个简单的 MVC 网站 - BooksStore(一)

    一步步打造一个简单的 MVC 网站 - BooksStore(一) 本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore 简介 主 ...

  3. [.NET] 一步步打造一个简单的 MVC 电商网站 - BooksStore(二)

    一步步打造一个简单的 MVC 电商网站 - BooksStore(二) 本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore 前: ...

  4. [.NET] 一步步打造一个简单的 MVC 电商网站 - BooksStore(三)

    一步步打造一个简单的 MVC 电商网站 - BooksStore(三) 本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore &l ...

  5. [.NET] 一步步打造一个简单的 MVC 电商网站 - BooksStore(四)

    一步步打造一个简单的 MVC 电商网站 - BooksStore(四) 本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore &l ...

  6. [.NET] 一步步打造一个简单的 MVC 电商网站 - BooksStore(一)

    一步步打造一个简单的 MVC 电商网站 - BooksStore(一) 本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore &l ...

  7. [.NET] 一步步打造一个简单的 MVC 电商网站 - BooksStore(一) (转)

    http://www.cnblogs.com/liqingwen/p/6640861.html 一步步打造一个简单的 MVC 电商网站 - BooksStore(一) 本系列的 GitHub地址:ht ...

  8. Css打造一个简单的静态七巧板

    偶然在微博上看到用css写一个七巧板,正好也有一些源代码,于是就试着敲了敲. 主要是利用了css3的transform,实现平移,旋转,变形,直接用看到的代码敲出来之后有些问题,因为宽度上下面绿色的三 ...

  9. Flutter随笔(二)——使用Flutter Web + Docker + Nginx打造一个简单的Web项目

    前言 Flutter作为一个跨平台UI框架,功能十分强大,仅用一套代码便能编译出Android.iOS.Web.windows.macOS.Windows.Linux等平台上的应用,各平台应用体验高度 ...

随机推荐

  1. 80 端口被占用 pid=4

    80端口被pid=4的系统进程给占用的解决方法: 一般开发的时候我们都会安装sqlserver ,也会把Sql server Reporting Services 安装上去.原因就是这个服务占用了80 ...

  2. 如何利用pt-online-schema-change进行MySQL表的主键变更

    业务运行一段时间,发现原来的主键设置并不合理,这个时候,想变更主键.这种需求在实际生产中还是蛮多的. 下面,看看pt-online-schema-change解决这类问题的处理方式. 首先,创建一张测 ...

  3. Mac OS 使用 Vagrant 管理虚拟机(VirtualBox)

    Vagrant(官网.github)是一款构建虚拟开发环境的工具,支持 Window,Linux,Mac OS,Vagrant 中的 Boxes 概念类似于 Docker(实质是不同的),你可以把它看 ...

  4. 通过微信小程序看前端

    前言 2016年9月22日凌晨,微信官方通过“微信公开课”公众号发布了关于微信小程序(微信应用号)的内测通知.整个朋友圈瞬间便像炸开了锅似的,各种揣测.介绍性文章在一夜里诞生.而真正收到内测邀请的公众 ...

  5. 【C#公共帮助类】 ToolsHelper帮助类

    这个帮助类,目前我们只用到了两个,我就先更新这两个,后面有用到的,我会继续更新这个Helper帮助类 在Tools.cs中 有很多方法 跟Utils里是重复的,而且Utils里的方法更加新一点,大家可 ...

  6. ILJMALL project过程中遇到Fragment嵌套问题:IllegalArgumentException: Binary XML file line #23: Duplicate id

    出现场景:当点击"分类"再返回"首页"时,发生error退出   BUG描述:Caused by: java.lang.IllegalArgumentExcep ...

  7. Struts的拦截器

    Struts的拦截器 1.什么是拦截器 Struts的拦截器和Servlet过滤器类似,在执行Action的execute方法之前,Struts会首先执行Struts.xml中引用的拦截器,在执行完所 ...

  8. Mac OS X 上编写 ASP.NET vNext (二) IDE配置

    上一篇中介绍了如何在OS X上搭建.Net运行时.不过光有运行时还不够,还需要有一个好用的IDE,有了IDE的支持,OS X上的开发才称为可能. 和上篇类似,这里先列举出具体步骤,个人可以根据自己的情 ...

  9. Kafka1 利用虚拟机搭建自己的Kafka集群

    前言:       上周末自己学习了一下Kafka,参考网上的文章,学习过程中还是比较顺利的,遇到的一些问题最终也都解决了,现在将学习的过程记录与此,供以后自己查阅,如果能帮助到其他人,自然是更好的. ...

  10. Joshua Bloch错了? ——适当改变你的Builder模式实现

    注:这一系列都是小品文.它们偏重的并不是如何实现模式,而是一系列在模式实现,使用等众多方面绝对值得思考的问题.如果您仅仅希望知道一个模式该如何实现,那么整个系列都会让您失望.如果您希望更深入地了解各个 ...