在上一篇文章中,我们实现了使用自定义注解导出Excel的小案例。但是有问题的。我们发现,如果对象属性中包含了date类型或者使用了枚举类。这个时候就会出问题。我们来看看问题所在:

是不是已经看到了结果:性别出现了1和0 ,而日期也出现的格式不是我们习惯的格式。.在来看看这个1是怎么来的。

是从枚举类GenderEnum中来的。

我们来看看性别枚举类:

现在来说说本文我们主要解决的问题:

1:怎么对日期进行格式化?

2:怎么对枚举类进行转中文?

一:怎么对日期进行格式化

通过前几篇文章学习中,我们知道了怎么自定义注解及使用。我们也知道自定义枚举类的成员属性可以有八大基本类型及其他类型。

分析:

那么我们可不可以用boolean来标识是否使用日期,在使用string类型对日期进行格式?

1.1:在自定义注解的成员变量中,我们定义一个Boolean类型的成员,用来标注要开始对日期进行格式化了。

/**

* 是否需要格式化日期.

* 改字段必须注解在date类型的字段上。否则会有问题

* @return

*/

public abstract boolean isDateFormat() default false;

1.2:我们使用String类型的成员变量,来对日期进行格式化:

/**

* 日期格式化 format

* @return

*/

public abstract String dateFormatSdf() default "yyyy-MM-dd";

1.3:那么怎么使用呢?

我们在AnnotationUserPoJo这个类的private Date birthDay;属性上使用:

/**

* 生日

*/

@ExcelAnnotation(ZHName = "生日", colum ="C" ,isDateFormat = true,dateFormatSdf = "yyyy-MM-dd")

//    @ExcelAnnotation(ZHName = "生日", colum ="C")

private Date birthDay;

这样就可以了。

1.4:那么怎么解析呢?

在excel导出工具类中:

二:怎么对枚举类code进行转中文?

分析:我们知道自定义注解的属性还支持Class类型的。所以我们可以使用一个class属性的成员来标识是哪个枚举对象;

使用String类型的属性来标识调用枚举类中的那个方法;

同样使用class类型标注,需要调用方法的参数类型。

经过分析,我们就能得到一些数据:

2.1:在自定义注解中,使用class类型的属性标识是哪个枚举对象:

/**

* 枚举类的类

* @return

*/

public abstract Class EnumClazz() default String.class;

2.2:使用String类型的属性标注调用枚举类中的哪个方法进行code转中文

/**

*枚举类的方法

* @return

*/

public abstract String EnumMethodName() default  "getDescriptionByCode";

2.3:同样使用class类型的属性标注,调用方法中的参数类型:

/**

* 枚举类的方法的参数

* @return

*/

public  abstract  Class methodArgClass() default Integer.class;

2.4:枚举类中code转行中文使用

/**

* 性别

*/

@ExcelAnnotation(ZHName = "性别", colum ="D", EnumClazz=GenderEnum.class,

EnumMethodName = "getDescriptionByCode" ,methodArgClass=Integer.class )

//    @ExcelAnnotation(ZHName = "性别", colum ="D")

private Integer Gender;

2.5:解析注解时候对枚举类处理:

Class clazz = attr.EnumClazz();

if(!"java.lang.String".equals(clazz.getName())){ //需要进行转换

Method method = clazz.getMethod(attr.EnumMethodName(),attr.methodArgClass());

Object obj = method.invoke(clazz,field.get(vo));

if(null != obj ){

cell.setCellValue( obj.toString());

}else{

cell.setCellValue( "");

}

}else{

cell.setCellValue(field.get(vo) == null ? ""

: attr.pre()+String.valueOf(field.get(vo))+attr.suffix());

}

写完之后。我们重写进行测试:

导出的excel是我们需要的结果。OK ,优化初级阶段ok了。

看到很多朋友说代码怎么不贴全。因为excel导出太多代码了。后面凯哥会放到git上,供大家下载。

下篇预告:在下一篇文章中,我们将进行plush版升级改造。也是我们Java注解学习系列最后一篇文章。

声明:本文是《Java中注解学习系列教程》第五篇文章-小案例,使用自定义注解实现Excel导出优化初级阶段。

java excel 注解_Java中注解学习系列教程-5 excel导出优化初级阶段相关推荐

  1. @excel 注解_Java中注解学习系列教程-3

    本文是<Java中注解学习系列教程>第三篇文章 在前两篇中我们学习了注解的定义.JDK内置注解.注解分类及自定义注解的写法. 本文咱们将学习: ​ 1:自定义注解一些说明 2:自定义注解怎 ...

  2. java类注释_java中注解

    一.什么是注解 注解是jdk5.0引入的新技术! 注解(Annotation):java中对某一程序片段注释说明.这个注释说明能被其它程序读到并执行相应操作! 二.注解的作用 1.能对于程序做出解释, ...

  3. java 读excel 流_Java中使用POI读取大的Excel文件或者输入流时发生out of memory异常参考解决方案...

    原文:https://www.cnblogs.com/cksvsaaa/p/7280261.html 注意:此参考解决方案只是针对xlsx格式的excel文件! 背景 前一段时间遇到一种情况,服务器经 ...

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

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

  5. @data注解的作用_Java中注解学习系列教程-2

    在上一篇文章中,我们讲解了:Java中注解的定义.JDK中内置注解.第三方注解. 本文是注解系列教程中的第二篇.来看看今天主要内容: ​ 1:注解的分类 2:元注解说明 3:自定义注解声明 一:注解的 ...

  6. 生信宝典:生物信息学习系列教程、视频、资源

    生信的作用越来越大,想学的人越来越多,不管是为了以后发展,还是为了解决眼下的问题.但生信学习不是一朝一夕就可以完成的事情,也许你可以很短时间学会一个交互式软件的操作,却不能看完程序教学视频后就直接写程 ...

  7. OpenCV学习系列教程第五篇:测试和提高代码的效率

    Opencv-Python学习系列教程第五篇 来自opencv-python官方学习文档,本人谨做翻译和注释,以及一些自己的理解 本文由作者翻译并进行代码验证,转载请注明出处~ 官方文档请参阅:htt ...

  8. Python2爬虫学习系列教程

    http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己 ...

  9. Python爬虫学习系列教程

    大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己实际写的一些小爬虫,在这里跟大家一同分享,希望对Python爬虫 ...

最新文章

  1. OpenCV Manager package was not found Try to install it?
  2. 循环矩阵傅里叶对角化
  3. TWaver html5 + NodeJS + express + websocket.io + redis 快速搭建项目(一)
  4. C#浅拷贝与深拷贝区别
  5. 膨胀的木棍(信息学奥赛一本通-T1246)
  6. 黑苹果安装记录(史上最简单的安装教程——小白福利)
  7. 用艾宾浩斯曲线记忆周期来背单词是否有理论依据?
  8. sucks倒计时插件笔记
  9. 2022最新整理新手零基础系统的自学网络安全
  10. 萨达阿萨德发送到在线橙V
  11. SVN上传的时候没法显示文件名,只显示后缀名
  12. 若依框架前端菜单生成,权限标识,路由地址
  13. 微信公众号编辑器哪个好
  14. 机器学习介绍及线性回归技术总结
  15. 日本图书馆有哪些地方
  16. Android性能优化之使用线程池处理异步任务
  17. 单片机,51红外通信代码,详细注释【普中科技】【350行】【原创】
  18. 现代检测技术--概论
  19. java买票程序_Java如何编写自动售票机程序
  20. Android仿支付宝UI功能开发,Android类似支付宝我的界面切片

热门文章

  1. keil—MDK字体配色方案
  2. find xargs
  3. centos升级gdb支持pretty-printer
  4. 广大程序员不要做外包
  5. 【励志】本科四年,我通过创业赚到了人生第一个500万
  6. 用find在html中找字符串,Windows CMD中 find命令(字符串查找)
  7. 第一次预习作业(html,css,js简单介绍,HTML常用标签)
  8. 电销接通率低,深圳外呼系统应该怎么选择?
  9. 默哀STAND SILENTLY!
  10. 《AcFun 的视频架构演化实践》读后感