EasyExcel动态表头导出(支持多级表头)
在很多业务场景中,都会应用到动态表头的导出,也会涉及到多级表头的导出,如下图所示

通过EasyExcel,我们可以快速实现这一需求,具体代码如下
DynamicHeader- import java.util.List;
- /**
- *@Author: <a target="_blank" href="https://www.cnblogs.com/mailto:fxsen@foxmail.com">Fxsen</a>
- *@CreateTime: 2023年09月22日 09:16
- */
- public class DynamicHeader {
- /**
- * 要导出的字段名称英文
- */
- private String fieldName;
- /**
- * 要导出的表头名称中文
- */
- private String headName;
- /**
- * 如果是多级表都,插入下级
- */
- private List<DynamicHeader> children;
- public String getFieldName() {
- return fieldName;
- }
- public void setFieldName(String fieldName) {
- this.fieldName = fieldName;
- }
- public String getHeadName() {
- return headName;
- }
- public void setHeadName(String headName) {
- this.headName = headName;
- }
- public List<DynamicHeader> getChildren() {
- return children;
- }
- public void setChildren(List<DynamicHeader> children) {
- this.children = children;
- }
- }
复制代码 CustomTitleWriteHandler
[code]import com.alibaba.excel.write.handler.SheetWriteHandler;import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;import org.apache.poi.ss.usermodel.CellStyle;import org.apache.poi.ss.usermodel.*;import org.apache.poi.ss.util.CellRangeAddress;public class CustomTitleWriteHandler implements SheetWriteHandler { /** * 标题 */ private final String fileName; /** * 字段个数 */ private final Integer count; public CustomTitleWriteHandler(Integer count,String fileName) { this.fileName = fileName; this.count = count; } @Override public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { } @Override public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { // 获取clazz所有的属性 Workbook workbook = writeWorkbookHolder.getWorkbook(); Sheet sheet = workbook.getSheetAt(0); Row row1 = sheet.createRow(0); row1.setHeight((short) 800); Cell cell = row1.createCell(0); //设置标题 cell.setCellValue(fileName); CellStyle cellStyle = workbook.createCellStyle(); cellStyle.setBorderBottom(BorderStyle.THIN); //下边框 cellStyle.setBorderLeft(BorderStyle.THIN);//左边框 cellStyle.setBorderTop(BorderStyle.THIN);//上边框 cellStyle.setBorderRight(BorderStyle.THIN);//右边框 cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); cellStyle.setAlignment(HorizontalAlignment.CENTER); Font font = workbook.createFont(); font.setBold(true); font.setFontHeight((short) 400); font.setFontName("宋体"); cellStyle.setFont(font); cell.setCellStyle(cellStyle); CellRangeAddress region = new CellRangeAddress(0, 0, 0, count - 1); setRegionStyle(sheet,region,cellStyle); sheet.addMergedRegion(region); } /** * 为合并的单元格设置样式(可根据需要自行调整) */ public static void setRegionStyle(Sheet sheet, CellRangeAddress region, CellStyle cs) { for (int i = region.getFirstRow(); i |