excel导入导出通用工具类
来源:互联网 发布:inur login.php 编辑:程序博客网 时间:2024/04/29 04:29
背景
本人在上家公司有段时间负责报表的事情,频繁的需要使用excel的导入导出,于是写了一套公用代码,
写作时间是2015年6月,现在有空分享出来,供大家参考
特性
导入模板具有以下特性:1、列格式化和列值校验,是否允许空判断
2、可指定列提取
3、提供回调函数,进行额外字段填充和业务逻辑
4、报错机制,报错提示批量、准确具体行列
导出模板具有以下特性:
1、可生成序列号
2、可指定列长度
此套导入和导出开发模板简单易用,可读性强,维护方便,让程序员避开复杂的代码操作,专注业务。基础类
AbstractCellValueVerify:抽象列值校验器
AbstractCellVerify:抽象列校验器,格式化和校验列值,可根据构造函数拓展,比较校验是否允许为null。AbstractCellValueVerify和AbstractCellVerify关系是AbstractCellVerify使用到了AbstractCellValueVerify。
AbstractVerifyBuidler:抽象校验构建器,用来构建实体对应所有列的校验器
下面都是具体格式的列校验器,对列格式化为对应格式,并对列值进行校验
BigDecimalVerify、DateTimeVerify、DoubleVerify、IntegerVerify、StringToIntegerVerify、StringVerify。
特殊说明一下的是StringToIntegerVerify:针对字符串转int类型的情况,比如借款类型
ParseSheetCallback:解析Sheet回调函数
导入示例:
/** * 导入用户校验类 * @author Administrator * */public class MemberVerifyBuilder extends AbstractVerifyBuidler {private static MemberVerifyBuilder builder = new MemberVerifyBuilder();public static MemberVerifyBuilder getInstance() {return builder;}/** * 定义列校验实体:提取的字段、提取列、校验规则 */private MemberVerifyBuilder() {cellEntitys.add(new CellVerifyEntity("name", "A", new StringVerify("姓名", true)));cellEntitys.add(new CellVerifyEntity("age", "B", new IntegerVerify("年龄", true)));cellEntitys.add(new CellVerifyEntity("country", "D", new StringToIntegerVerify("国家",new AbstractCellValueVerify() {@Overridepublic Object verify(Object fileValue) {// TODO 转换:从excel中得到string转成需要的integerreturn 1;}}, true)));cellEntitys.add(new CellVerifyEntity("date", "F", new DateTimeVerify("创建日期", "yyyy/MM/dd",true)));// 必须调用super.init();}}
public class MainClass {public static void main(String[] args) throws Exception {parseSheet();parseSheetWithCallback();}/** * 解析excel * @throws Exception */public static void parseSheet() throws Exception {Workbook wb = WorkbookFactory.create(new FileInputStream("src/test/java/example/imp/import.xlsx"));Sheet sheet = wb.getSheetAt(0);// parseSheetList<Member> list = ExcelImportUtils.parseSheet(Member.class, MemberVerifyBuilder.getInstance(), sheet, 1);System.out.println(JSON.toJSONString(list));}/** * 解析excel带回调函数:做一些额外字段填充 * @throws Exception */public static void parseSheetWithCallback() throws Exception {Workbook wb = WorkbookFactory.create(new FileInputStream("src/test/java/example/imp/import.xlsx"));Sheet sheet = wb.getSheetAt(0);final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// parseSheetList<Member> list = ExcelImportUtils.parseSheet(Member.class, MemberVerifyBuilder.getInstance(), sheet, 1, new ParseSheetCallback<Member>() {@Overridepublic void callback(Member t, int rowNum) throws Exception {t.setDateDesc(sdf.format(t.getDate()));}});System.out.println(JSON.toJSONString(list));}}
导入示例:
public class MainClass {/** * 定义:excel标题,提取数据的字段,占用列长度 */private static final Object[][] fields = new Object[][]{{"姓名","name",POIConstant.TIME},{"年龄","age",POIConstant.NUMBER},{"国家","country",POIConstant.NAME},{"创建日期","dateDesc",POIConstant.TIME},};private static final Object[][] fieldsWithNum = new Object[][]{{"序号","",POIConstant.NUMBER},{"姓名","name",POIConstant.TIME},{"年龄","age",POIConstant.NUMBER},{"国家","country",POIConstant.NAME},{"创建日期","dateDesc",POIConstant.TIME},};public static void main(String[] args) throws Exception {exportBean();exportBeanWithNum();exportMap();}/** * 1、导出对象 * @throws Exception */public static void exportBean() throws Exception{List<Member> list = new ArrayList<>();list.add(new Member("张三", 28, 1, "2016-10-19"));list.add(new Member("李四", 25, 2, "2016-10-19"));Workbook bean = ExcelExportUtils.createWorkbook(list, fields);bean.write(new FileOutputStream("src/test/java/example/exp/exportBean.xlsx"));}/** * 2、导出对象带序列号 * @throws Exception */public static void exportBeanWithNum() throws Exception{List<Member> list = new ArrayList<>();list.add(new Member("张三", 28, 1, "2016-10-19"));list.add(new Member("李四", 25, 2, "2016-10-19"));Workbook bean = ExcelExportUtils.createWorkbook(list, fieldsWithNum, true);bean.write(new FileOutputStream("src/test/java/example/exp/exportBeanWithNum.xlsx"));}/** * 导出map * @throws Exception */public static void exportMap() throws Exception{List<Map<String, Object>> list = new ArrayList<>();Map<String, Object> map = new HashMap<>();map.put("name", "张三");map.put("age", 28);map.put("country", 1);map.put("dateDesc", "2016-10-19");list.add(map);map = new HashMap<>();map.put("name", "张三");map.put("age", 28);map.put("country", 1);map.put("dateDesc", "2016-10-19");list.add(map);Workbook bean = ExcelExportUtils.createWorkbook(list, fields);bean.write(new FileOutputStream("src/test/java/example/exp/exportMap.xlsx"));}}
源码下载
https://github.com/kuyuyingzi/excel-io.git
后续
能力有限,后续有空也会不断优化,有什么建议还希望各位大神指点!!!
0 0
- excel导入导出通用工具类
- 通用excel导入导出
- 通用EXCEL导入导出
- Excel导入导出工具类
- excel导入导出工具类
- Excel导入导出工具类
- C#导入导出Excel通用类(SamWang)
- 通用的excel导入导出类
- java poi导入Excel通用工具类
- java poi导入Excel通用工具类
- 通用数据库导入导出excel
- java导出excel,导入excel,导出csv工具类整理
- excel 导入导出 poi工具类
- 导入导出Excel工具类ExcelUtil
- 导入导出Excel工具类ExcelUtil
- 导入导出Excel工具类ExcelUtil
- java 导入导出Excel工具类ExcelUtil
- Java导入导出Excel工具类ExcelUtil
- Spring 使用@ComponentScan扫描注解包
- 使用SQLite
- win10 JDK安装图解
- 使用开源imageLoader优化listview加载大量本地图片的demo
- MyEclipse下要给主函数传递参数问题
- excel导入导出通用工具类
- 五大最受欢迎的BUG管理系统 .
- ANR backtrace含义
- MyEclipse10搭建Strust2开发环境
- 使用Rxjava的MVP架构实现
- resin开启gzip压缩
- tableview 上下滑动的时候内容消失了 怎么办
- Cocos2d-x学习之路(一)
- 使用Strust2框架写HelloWorld