Java工具类——实体类列表写入excel
public static <T> void writeListToExcel(List<T> dataList, String filePath, String sheetName)
throws IOException, IllegalAccessException {
if (dataList == null || dataList.isEmpty()) {
return;
}
Workbook workbook;
File file = new File(filePath);
if (file.exists()) {
try (FileInputStream inputStream = new FileInputStream(file)) {
workbook = new XSSFWorkbook(inputStream);
}
} else {
workbook = new XSSFWorkbook();
}
Sheet sheet = workbook.getSheet(sheetName);
if (sheet != null) {
int sheetIndex = workbook.getSheetIndex(sheet);
workbook.removeSheetAt(sheetIndex);
sheet = workbook.createSheet(sheetName);
} else {
sheet = workbook.createSheet(sheetName);
}
Class<?> clazz = dataList.get(0).getClass();
Field[] fields = clazz.getDeclaredFields();
Row headerRow = sheet.createRow(0);
CellStyle headerStyle = createHeaderStyle(workbook);
for (int i = 0; i < fields.length; i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(fields[i].getName());
cell.setCellStyle(headerStyle);
}
for (int i = 0; i < dataList.size(); i++) {
Row row = sheet.createRow(i + 1);
T item = dataList.get(i);
for (int j = 0; j < fields.length; j++) {
fields[j].setAccessible(true);
Object value = fields[j].get(item);
Cell cell = row.createCell(j);
if (value != null) {
if (value instanceof Number) {
cell.setCellValue(((Number) value).doubleValue());
} else if (value instanceof Boolean) {
cell.setCellValue((Boolean) value);
} else {
cell.setCellValue(value.toString());
}
}
}
}
for (int i = 0; i < fields.length; i++) {
sheet.autoSizeColumn(i);
}
try (FileOutputStream outputStream = new FileOutputStream(filePath)) {
workbook.write(outputStream);
} finally {
workbook.close();
}
}
private static CellStyle createHeaderStyle(Workbook workbook) {
CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();
font.setBold(true);
style.setFont(font);
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
style.setBorderBottom(BorderStyle.THIN);
style.setBorderTop(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
return style;
}