自定义注解导出excel数据

利用自定义注解方式,对数据列表进行简单的导出操作。即在实体对象的属性域上添加导出标识的注解,在对实体进行导出时,利用自定义注解进行反射的方法,获取实体需要导出的属性及值。该导出功能由于进行了封装,所以只适用于简单的excel导出功能,如需对导出的excel进行格式上的美化或合并单元格之类的操作,则本功能未进行实现。

优点:

1、由于使用了自定义注解,在导出时,只需要给接口传实体对象类和数据的list以及一些条件参数即可,使用起来简单易懂。
2、由于对导出excel方法进行了封装,所以导出时不用在进行繁琐的excel表格代码的编写了。
3、使用自定义注解的方式进行方法的封装,可根据业务需要进行自定义注解的扩展,满足业务需求,即具有可扩展性。
4、自定义注解中封装了一个数组属性,用来进行导出对象属性的分组,如系统中不同页面显示的对象属性不同,这时可以根据需要进行属性的分组,在导出时传入分组的参数,对应导出分组的属性值。

缺点:

1、导出的excel表格样式比较单一简单,暂时不支持合并单元格、添加表格特殊样式功能。

部分代码介绍:

1、ExcelField.java自定义注解类介绍:

@Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ExcelField {/*** 导出字段名(默认调用当前字段的“get”方法,如指定导出字段为对象,请填写“对象名.对象属性”,例:“area.name”、“office.name”)*/String value() default "";/*** 导出字段标题(需要添加批注请用“**”分隔,标题**批注,仅对导出模板有效)*/String title();/*** 字段类型(0:导出导入;1:仅导出;2:仅导入)*/int type() default 0;/*** 导出字段对齐方式(0:自动;1:靠左;2:居中;3:靠右)*/int align() default 0;/*** 导出字段字段排序(升序)*/int sort() default 0;/*** 如果是字典类型,请设置字典的type值*/String dictType() default "";/*** 反射类型*/Class<?> fieldType() default Class.class;/*** 字段归属组(根据分组导出导入)*/int[] groups() default {};
}

2、导出excel类代码简单介绍:

/*** 构造函数* @param title 表格标题,传“空值”,表示无标题* @param cls 实体对象,通过annotation.ExportField获取标题* @param type 导出类型(1:导出数据;2:导出模板)* @param groups 导入分组*/public ExportExcel(String title, Class<?> cls, int type, int... groups){// Get annotation field Field[] fs = cls.getDeclaredFields();for (Field f : fs){ExcelField ef = f.getAnnotation(ExcelField.class);if (ef != null && (ef.type()==0 || ef.type()==type)){if (groups!=null && groups.length>0){boolean inGroup = false;for (int g : groups){if (inGroup){break;}for (int efg : ef.groups()){if (g == efg){inGroup = true;annotationList.add(new Object[]{ef, f});break;}}}}else{annotationList.add(new Object[]{ef, f});}}}// Get annotation methodMethod[] ms = cls.getDeclaredMethods();for (Method m : ms){ExcelField ef = m.getAnnotation(ExcelField.class);if (ef != null && (ef.type()==0 || ef.type()==type)){if (groups!=null && groups.length>0){boolean inGroup = false;for (int g : groups){if (inGroup){break;}for (int efg : ef.groups()){if (g == efg){inGroup = true;annotationList.add(new Object[]{ef, m});break;}}}}else{annotationList.add(new Object[]{ef, m});}}}// 根据自定义注解中的sort进行排序Collections.sort(annotationList, new Comparator<Object[]>() {public int compare(Object[] o1, Object[] o2) {return new Integer(((ExcelField)o1[0]).sort()).compareTo(new Integer(((ExcelField)o2[0]).sort()));};});// InitializeList<String> headerList = Lists.newArrayList();for (Object[] os : annotationList){String t = ((ExcelField)os[0]).title();// 如果是导出,则去掉注释if (type==1){String[] ss = StringUtils.split(t, "**", 2);if (ss.length==2){t = ss[0];}}headerList.add(t);}initialize(title, headerList);}

3、调用该接口代码介绍:

 String fileName = "银行列表"+DateUtils.getDate("yyyyMMddHHmmss")+"."+fileType;//分页查询导出数据Page<InvestorBankCard> page = bankCardService.findPage(new Page<InvestorBankCard>(request, response, -1), investorBankCard);
//调用导出方法进行excel表格导出
new ExportExcel("银行卡数据", InvestorBankCard.class).setDataList(page.getList()).write(response, fileName);return null;

总结

自定义注解可以灵活的对代码进行封装使用,通过本次excel表格数据的功能开发,对自定义注解有了一些新的认识,在一些特定的场景,使用自定义注解可以节省很大的代码量,并且具有重用性。避免大量的重复代码。由于导出涉及的excel表格比较简单,所以该功能还需要在进行完善,至少需要支持单元格的合并及一些表格样式或字体样式的设置,待后续业务需要或有空余时间在进行完善。
完整工程代码已打包上传到svn上了,如有需要可以点击以下链接进行下载:https://download.csdn.net/download/songyou05/10634062,对代码如有疑问,可加QQ:734108708进行沟通交流。

自定义注解导出excel数据相关推荐

  1. java自定义注解实现excel数据导入导出,设置单元格数据验证与生成省市区多列联动效果

    本文通过自定义注解实现excel数据导入导出.以及设置excel文件中列数据验证,即用户在excel文件中输入数据时就可以对数据格式验证是否符合,节省了程序中过多的数据验证操作,注解还额外提供了一系列 ...

  2. excel导出多重表头utils_Java中注解学习系列教程-4 使用自定义注解实现excel导出...

    本文是<Java中注解学习系列教程>第四篇文章也是小案例文章. 自定义注解小案例是:使用自定义注解实现excel导出. Excel导出分析: ​ 有表头.数据值.一般第一行是表头,从第二行 ...

  3. python导入excel数据-Python数据处理之导入导出excel数据

    欢迎点击上方"AntDream"关注我 .Python的一大应用就是数据分析了,而数据分析中,经常碰到需要处理Excel数据的情况.这里做一个Python处理Excel数据的总结, ...

  4. php导出excel数据使用csv替代xls格式

    为什么80%的码农都做不了架构师?>>>    php导出excel数据使用csv替代xls格式 一直以来需要将某些后台数据导出来以供运营人员查看,因为他们都用excel.所以最初的 ...

  5. java excel data 导入数据_java实现导入导出excel数据

    项目需要,要实现一个导入导出excel的功能,于是,任务驱动着我学习到了POI和JXL这2个java操作Excel的插件. 一.POI和JXL介绍 1.POI:是对所有office资源进行读写的一套工 ...

  6. flask使用tablib导出excel数据表

    在网页中常常有导出数据的需求,尤其是一下管理类平台.在flask中要导出excel数据表,通常可以使用xlwt库,创建文件并逐行写入数据,但是使用起来总是感觉很麻烦.tablib库相对操作更加方便. ...

  7. php导出excel数据代码,phpspreadsheet导出数据到Excel的方法介绍(代码示例)

    本篇文章给大家带来的内容是关于phpspreadsheet导出数据到Excel的方法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 之前我们使用PHP导出Excel数 ...

  8. php把数据创建一个表格,PHP创建(导出Excel数据表格)

    /** * 创建(导出Excel数据表格) * @param  array   $list 要导出的数组格式的数据 * @param  string  $filename 导出的Excel表格数据表的 ...

  9. 【译】Asp.Net 导出 Excel 数据的9种方案

    简介 Excel 的强大之处在于它不仅仅只能打开Excel格式的文档,它还能打开CSV格式.Tab格式.website table 等多钟格式的文档.它具备自动识别行号,字符,格式化数字等功能,例如: ...

最新文章

  1. 2021广东省高考成绩查询时间,广东省高考成绩查询时间及方式公布
  2. c/c++ g++默认编译调用成功,O2优化却发生Segmentation fault
  3. Android 抓包工具r0capture使用
  4. Spring Security中的SecurityContext和SecurityContextHolder是什么?
  5. 数据科学入门与实战:Seaborn001
  6. 吴恩达深度学习2.3练习_Improving Deep Neural Networks_Tensorflow
  7. 最新增值税商品税目编码表_姓名:增值税,税率:13%,9%,6%,这是我最新最全税率表!...
  8. kx3552驱动最佳连线图_意甲新赛季5大看点:C罗连线苏牙,皮尔洛执教初体验
  9. java_eclipse中添加外部动态链接库(dll文件)的三种方式
  10. bootstrap 快速入门
  11. 一道面试题,设计电路,set,reset
  12. 微信支付(PC扫码支付和H5公众号支付)
  13. chmod 755 究竟是什么鬼
  14. 【磁盘】 文件外存分配方式
  15. 自然语言处理----常用函数简析
  16. 不用重做系统,教你如何把机械硬盘上面的系统迁移到固态硬盘!
  17. MQ响应码是2059该如何解决
  18. Sensor Hub
  19. 个人网站的设计与实现
  20. python 连通区域_二值图像连通区域标记

热门文章

  1. 最详细的A/B test 原理
  2. 保研之旅9:东南大学“通信与信息系统学科”推免面试
  3. Java打印带边框的乘法口诀表_Java 面试 - 打印九九乘法口诀表
  4. C/C++的灵魂—指针实现冒泡排序、选择排序和插入排序
  5. androidstudio引用本地maven_android studio 之dependence添加依赖maven仓库中的项目出错
  6. 创建守护进程的步骤与练习,每隔1s向time.log写入系统时间!
  7. 2021chrome浏览器视频加速(网盘)
  8. Designing Data-Intensive Applications
  9. mysql cpu 占比过高问题解决
  10. 计算机专业在职研究生排名,计算机专业在职研究生学校排名