public class ExcelMap {
public static List<ExcelExportEntity> getExportEntityList(Class t){
List<ExcelExportEntity> list = new LinkedList<>();
Field[] fields = t.getDeclaredFields();
class innerCompar {
private Field field;
private Excel excel;
private int orderNum;
public int getOrderNum() {
return orderNum;
}
public void setOrderNum(int orderNum) {
this.orderNum = orderNum;
}
public Field getField() {
return field;
}
public void setField(Field field) {
this.field = field;
}
public Excel getExcel() {
return excel;
}
public void setExcel(Excel excel) {
this.excel = excel;
}
}
List<innerCompar> excelList = new LinkedList<>();
for (Field f :
fields) {
Excel excel = f.getAnnotation(Excel.class);
if (excel != null) {
excelList.add(new innerCompar() {
{
setExcel(excel);
setField(f);
String s = excel.orderNum();
if (s != null) {
setOrderNum(Integer.valueOf(s));
}
}});
}
}
List<innerCompar> collect = excelList.stream().sorted(Comparator.comparing(innerCompar::getOrderNum)).collect(Collectors.toList());
for (innerCompar c :
collect) {
Field f = c.getField();
Excel excel = c.getExcel();
String name = excel.name();
String field = f.getName();
Dict dict = f.getAnnotation(Dict.class);
if (dict != null) {
field += "_dictText";
}
ExcelExportEntity entity = new ExcelExportEntity(name, field);
list.add(entity);
}
return list;
}
}
类字段定义实例:
@ApiModelProperty(value = "性别")
@Dict(dicCode = "XB")
@Excel(name = "性别", dicCode = "XB", orderNum = "10")
private String xbm;
使用:
public ModelAndView exportXls(@RequestBody XueShengVo xueSheng) {
。。。
List<ExcelExportEntity> mapList = ExcelMap.getExportEntityList(XueShengVo.class);
// Step.4 AutoPoi 导出Excel
ModelAndView mv = new ModelAndView(new ExcelView());
mv.addObject(NormalExcelConstants.FILE_NAME, "学生基本信息列表");
mv.addObject(NormalExcelConstants.MAP_LIST, mapList);
mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("学生基本信息数据", "导出人:" + sysUser.getRealname(), "学生基本信息"));
mv.addObject(NormalExcelConstants.DATA_LIST, list);
return mv;
}