EasyExcel动态表头导出(支持多级表头)

打印 上一主题 下一主题

主题 857|帖子 857|积分 2571

EasyExcel动态表头导出(支持多级表头)

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

通过EasyExcel,我们可以快速实现这一需求,具体代码如下
DynamicHeader
  1. import java.util.List;
  2. /**
  3. *@Author: <a target="_blank" href="https://www.cnblogs.com/mailto:fxsen@foxmail.com">Fxsen</a>
  4. *@CreateTime: 2023年09月22日  09:16
  5. */
  6. public class DynamicHeader {
  7.     /**
  8.      * 要导出的字段名称英文
  9.      */
  10.     private String fieldName;
  11.     /**
  12.      * 要导出的表头名称中文
  13.      */
  14.     private String headName;
  15.     /**
  16.      * 如果是多级表都,插入下级
  17.      */
  18.     private List<DynamicHeader> children;
  19.     public String getFieldName() {
  20.         return fieldName;
  21.     }
  22.     public void setFieldName(String fieldName) {
  23.         this.fieldName = fieldName;
  24.     }
  25.     public String getHeadName() {
  26.         return headName;
  27.     }
  28.     public void setHeadName(String headName) {
  29.         this.headName = headName;
  30.     }
  31.     public List<DynamicHeader> getChildren() {
  32.         return children;
  33.     }
  34.     public void setChildren(List<DynamicHeader> children) {
  35.         this.children = children;
  36.     }
  37. }
复制代码
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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

徐锦洪

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表