EasyExcel 自定义表头
效果展示:

关键代码:
导出代码
        // 第一行表头
        String enterpriseTitle = brandName + " " + seriesName + " "  + vehicleName;
        // 开始导出
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String fileName = URLEncoder.encode(enterpriseTitle, "UTF-8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
        EasyExcel.write(response.getOutputStream(), CarPartVO.class) 
                .registerWriteHandler(new ImplProgressReportSheetWriteHandler(enterpriseTitle)) // 第一行的注册合并策略
                .sheet(enterpriseTitle) // sheet名
                .relativeHeadRowIndex(2) // *表头行数  默认表头从第二行开始写入
                .registerWriteHandler(new HorizontalCellStyleStrategy(getHeadWriteCellStyle(), getContentWriteCellStyle()))
                .registerWriteHandler(new ExcelCellWidthStyleStrategy())
                .doWrite(exList);第一行表头
package com.adc.da.jydata.util;
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.*;
import org.apache.poi.ss.util.CellRangeAddress;
public class ImplProgressReportSheetWriteHandler implements SheetWriteHandler {
    private final String reportTitle; // 新增标题字段
    // 添加带参构造器
    public ImplProgressReportSheetWriteHandler(String reportTitle) {
        this.reportTitle = reportTitle;
    }
    @Override
    public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {}
    @Override
    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
        Workbook workbook = writeWorkbookHolder.getWorkbook();
        Sheet sheet = workbook.getSheetAt(0);
        Row row1 = sheet.createRow(0);
        row1.setHeight((short) 100);
        Cell row1Cell1 = row1.createCell(0);
        // 使用传入的标题参数
        row1Cell1.setCellValue(this.reportTitle); // 标题由参数带入;当然下面的也可以设计成参数,需要的话自己实现
        CellStyle row1CellStyle = workbook.createCellStyle();
        row1CellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        row1CellStyle.setAlignment(HorizontalAlignment.CENTER);
        Font row1Font = workbook.createFont();
        row1Font.setBold(true);
        row1Font.setFontName("宋体");
        row1Font.setFontHeightInPoints((short) 12);// 标题字号
        row1CellStyle.setFont(row1Font);
        row1Cell1.setCellStyle(row1CellStyle);
        sheet.addMergedRegionUnsafe(new CellRangeAddress(0, 1, 0, 10));// 共11列, 11-1=10
    }
}第二行表头
@Data
@ApiModel(value="CarPartVO 对象", description="导出车辆零部件信息表")
public class CarPartVO {
    @ExcelProperty(value = "零部件分级-一级")
    private String partLevel1;
    // ...  省略掉中间字段
    @ExcelIgnore
    private String level;
}
                 评论
            
                匿名评论
                隐私政策
            
            
                你无需删除空行,直接评论以获取最佳展示效果