在上一篇文章中,咱们完成了运用自界说注解导出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导出优化初级阶段。

推荐阅读