一、自定义注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ExcelColumn {
String value();
}
二、实体类上使用该注解即可
@ExcelColumn("日期")
private String date;
三、具体实现类
Workbook workbook = new XSSFWorkbook();
for (String dateStr : homeMap.keySet()) {
Sheet sheet = workbook.createSheet(dateStr);
Row titleRow = sheet.createRow(0);
int cellIndex = 0;
for (String fieldName : includeFields) {
Field field = OceanengineAdvertiserDataHome.class.getDeclaredField(fieldName);
ExcelColumn excelColumn = field.getAnnotation(ExcelColumn.class);
if (excelColumn != null) {
titleRow.createCell(cellIndex++).setCellValue(excelColumn.value());
} else {
titleRow.createCell(cellIndex++).setCellValue(field.getName());
}
}
List<OceanengineAdvertiserDataHome> userListByDate = homeMap.get(dateStr);
int rowIndex = 1;
for (OceanengineAdvertiserDataHome user : userListByDate) {
Row row = sheet.createRow(rowIndex++);
cellIndex = 0;
for (String fieldName : includeFields) {
Field field = OceanengineAdvertiserDataHome.class.getDeclaredField(fieldName);
ExcelColumn excelColumn = field.getAnnotation(ExcelColumn.class);
if (excelColumn != null) {
field.setAccessible(true);
Object value = field.get(user);
if (value instanceof Date) {
String formattedValue = getFormattedValue((Date) value, "yyyy-MM-dd HH:mm:ss");
row.createCell(cellIndex++).setCellValue(formattedValue);
} else {
String stringValue = getValue(user, field);
row.createCell(cellIndex++).setCellValue(stringValue);
}
} else {
Object fieldValue = field.get(user);
if (fieldValue instanceof String) {
row.createCell(cellIndex++).setCellValue((String) fieldValue);
} else if (fieldValue instanceof Integer) {
row.createCell(cellIndex++).setCellValue((Integer) fieldValue);
} else if (fieldValue instanceof Date) {
String formattedValue = getFormattedValue((Date) fieldValue, "yyyy-MM-dd HH:mm:ss");
row.createCell(cellIndex++).setCellValue(formattedValue);
} else {
row.createCell(cellIndex++).setCellValue("");
}
}
}
}
}