自定义导出Excel
需求背景:对象集合,某些字段无需添加到excel表格中,我们只需要给实体类字段添加特定注解实现,尽可能充满灵活性;
具体代码实现:

第一个注解的作用是更好实现Excel表格第一行属性
实体类
具体实现代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| package org.pt.excelutil;
import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.pt.annotation.ExcludeFromExcel; import org.pt.annotation.FiledName;
import java.io.FileOutputStream; import java.io.IOException; import java.lang.reflect.Field; import java.util.List;
public class ExcelExport { public static void writeToExcel(List<?> object,String path) { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet(); HSSFRow headerRow = sheet.createRow(0); Field[] fields = object.get(0).getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { Field field = fields[i]; field.setAccessible(true); if (field.isAnnotationPresent(FiledName.class) && !field.isAnnotationPresent(ExcludeFromExcel.class)) { FiledName annotation = field.getAnnotation(FiledName.class); Cell cell = headerRow.createCell(i); cell.setCellValue(annotation.value()); } } for (int rowNum = 1; rowNum <= object.size(); rowNum++) { HSSFRow row = sheet.createRow(rowNum); for (int i = 0; i < fields.length; i++) { Field field = fields[i]; field.setAccessible(true); if (field.isAnnotationPresent(FiledName.class) && !field.isAnnotationPresent(ExcludeFromExcel.class)) { Cell cell = row.createCell(i); Object value = null; try { value = field.get(object.get(rowNum - 1)); if (value != null) { cell.setCellValue(value.toString()); } else { cell.setCellValue(""); } } catch (IllegalAccessException e) { throw new RuntimeException(e); } } } }
try (FileOutputStream fileOut = new FileOutputStream(path)) { workbook.write(fileOut); System.out.println("Excel file written successfully."); } catch (IOException e) { throw new RuntimeException(e); }
} }
|
效果图