【造轮子】打造一个简单的万能Excel读写工具
2017-01-05 15:34
627 查看
大家工作或者平时是不是经常遇到要读写一些简单格式的Excel?
shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下。
厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式操作?来~,喜欢用lambda(虽然java的比较蛋疼~),来~看这个~
哈哈,如果你用的不是java8~~没问题,那就默默地用老方式匿名类来实现这些功能吧,但是这并不妨碍您的使用哈哈~~~
更新多次~希望大家也能够集思广益~
支持自定义JavaBean实体读取和HashMap自动读取
支持自定义扩展
支持自定义Sheet范围,数据开始行数
支持数据库查询直接导出Excel(Map/Object)
支持正则过滤数据格式
JavaBean实体支持使用注解添加正则规则校验,HashMap支持数组规则校验
依赖POI,使用Maven构建
增加新的xxx.Class定义类型导出,操作更简单
导出注解支持(自己使用seven.savewapper.anno.ExcelAnno类型注解)
修复在Filter数据后出现空行问题
丢入Result参数后的操作就如同操作Map/Object一样
支持基于数据库查询的导出(Map),直接放入Result对象即可
支持基于数据库查询的导出(Object),直接放入Result对象即可
直接JavaBean类型写入,注解命名
支持Map key-value类型写入
写入时支持和读取一样得过滤加工排序等写法
去除无用泛型
增加xlsx支持
更新为Build模式创建实例
增加数据过滤、数据转换和数据排序回调接口
采用链式set方式进行
可以继承 WapperMap 和 WapperObj进行扩展
直接使用ExcelFactory.getBeans进行获取,WapperObj则自己添加泛型
注解Value对应列标题,Required对应正则,可自己写正则表达式或者直接使用RegHelper
实体bean数据要比hashMap慢,7w条数据慢800ms,加入正则减慢速度(测试中加入了正则)
邮件(hacker.kill07@gmail.com)
QQ: 985390927
weibo: @Alden_情绪控
Blog: http://sweets.cf
shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下。
厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式操作?来~,喜欢用lambda(虽然java的比较蛋疼~),来~看这个~
哈哈,如果你用的不是java8~~没问题,那就默默地用老方式匿名类来实现这些功能吧,但是这并不妨碍您的使用哈哈~~~
更新多次~希望大家也能够集思广益~
github地址:https://github.com/MatrixSeven/ExcelReads
[b]欢迎大家fork,欢迎大家Star,更欢迎大家多提意见or建议,提供更好的想法~~[/b]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,加入正则减慢速度(测试中加入了正则)
使用方法说明
本程序只能读取简单格式的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("创建人"));
邮件(hacker.kill07@gmail.com)
QQ: 985390927
weibo: @Alden_情绪控
Blog: http://sweets.cf
相关文章推荐
- 【造轮子/更新】打造一个简单的万能Excel读写工具
- 自己打造了一个简单的站长工具(付多网站评分图)
- 打造一个简单的万能适配器
- 简单的万能ExcelReads读写工具
- 使用jxl读写excel(jxl操作excel)的简单例子
- EasyComm - 一个完全的串口读写类, 简单易用, 支持同步和异步.
- DrawTool (一个简单的绘图工具)
- 提供一个简单查询工具,供加工贸易企业的财务使用
- 导入Excel和导出Excel的简单方法与程序处理方法,使用Excel程序读写Excel ,实现Excel的多个 Sheets读写并导出
- 一个简单的JSF应用程序(使用exdel工具)
- 用Lucene做一个简单的Java搜索工具
- 一个简单生成Excel文件格式的java包。
- [MySQL] 一个简单的批处理,教你自制MySQL备份和还原工具.
- 强悍的vbs,很多时候如果只是简单的写一个windows桌面工具,可以优先考虑一下vbs,js什么的。
- 一个简单的生成sql2005数据字典的工具
- 使用jxl读写excel(jxl操作excel)的简单例子
- 一个查找替换文件的简单工具
- 一个简单的检查事件丢失的小工具
- 一个简单的读写注册表实例
- JXL应用(二) 读写excel的一个经典例子