1、对象类上搞注解
public class ReportExecuteDetailDto {
// 项目信息
private String regionCode; // 大区编号
@ExcelColumn(order = 0, title = "大区")
private String regionName; // 大区名称
@ExcelColumn(order = 14, title = "行申请金额", dataType = ExcelColumn.FieldType.Number)
private BigDecimal detailApplyAmount; // 行申请金额
}
2、创建注解类
package cn.com.ibm.portal.subject.annotation;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
public @interface ExcelColumn {
/**
* 标注该属性的顺序
* @return 该属性的顺序
*/
int order();
/**
* execl标题
* @return
*/
String title();
/**
* 日期数据的格式化格式
* @return
*/
String format() default "";
/**
* 单元格宽度
* @return
*/
int width() default 30;
/**
* 是否设置默认值:字符串默认为""
* Number:0.00
* Date: now
* Percent: 0.00%
*/
boolean hasDefault() default false;
/**
* 数据类型
* @return
*/
FieldType dataType() default FieldType.String;
public static enum FieldType {
/*
字符串
*/
String,
/*
数值
*/
Number,
/*
日期
*/
Date,
/*
百分比
*/
Percent;
}
}
3、获取属性
private static List<Field> getExcelColumnAnnotation(Class clazz) {
// 用来存放所有的属性域
List<Field> fieldList = Lists.newArrayList();
// 过滤带有注解的Field
for (Field f : clazz.getDeclaredFields()) {
if (f.getAnnotation(ExcelColumn.class) != null) {
fieldList.add(f);
}
}
// 这个比较排序的语法依赖于java 1.8
fieldList.sort(Comparator.comparingInt(
m -> m.getAnnotation(ExcelColumn.class).order()
));
return fieldList;
}
4、使用
private static List<PoiCellVo> genExecuteReportTitleData(ReportExecuteDto dto, int startRow, int startCol) {
List<PoiCellVo> result = Lists.newArrayList();
//添加固定标题
int fixStartRow = startRow;
int fixStartCol = startCol;
// 根据注解获取标题
List<Field> annotationList = getExcelColumnAnnotation(ReportExecuteDetailDto.class);
PoiCellVo fixVo = null;
ExcelColumn annotation = null;
for (Field field : annotationList) {
annotation = field.getAnnotation(ExcelColumn.class);
if (annotation == null) {
continue;
}
fixVo = new PoiCellVo(annotation.title(), fixStartRow, fixStartCol, 1, 1, headerColor, (short) annotation.width(), (short) 0);
result.add(fixVo);
fixStartCol++;
}文章来源:https://www.toymoban.com/news/detail-666210.html
return result;
}文章来源地址https://www.toymoban.com/news/detail-666210.html
到了这里,关于java使用@interface和反射来动态生成excel的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!