【EasyExcel】动态替换表头内容并应用样式

1.定义实体类

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.ContentStyle;
import com.alibaba.excel.metadata.BorderStyleEnum;
import com.alibaba.excel.metadata.VerticalAlignmentEnum;
import com.alibaba.excel.metadata.BooleanEnum;

@Data
@HeadRowHeight(40)
@ContentRowHeight(30)
@ExcelIgnoreUnannotated
@ContentStyle(
        wrapped = BooleanEnum.TRUE,
        borderBottom = BorderStyleEnum.THIN,
        borderLeft = BorderStyleEnum.THIN,
        borderRight = BorderStyleEnum.THIN,
        borderTop = BorderStyleEnum.THIN,
      	verticalAlignment = VerticalAlignmentEnum.CENTER,
        horizontalAlignment = HorizontalAlignmentEnum.CENTER
)
public class Product {
    @ColumnWidth(28)
    @ExcelProperty(value = {"${cellValue}经营统计表", "${cellWriterValue}", "产品名称"}, index = 0)
    private String productName;

    @ColumnWidth(28)
    @ExcelProperty(value = {"${cellValue}经营统计表", "${cellWriterValue}", "产品类别"}, index = 1)
    private String productCategory;

    @ColumnWidth(28)
    @ExcelProperty(value = {"${cellValue}经营统计表", "${cellWriterValue}", "价格"}, index = 2)
    private Double price;
}

  1. 自定义处理器
package com.example.util;

import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.commons.collections.CollectionUtils;
import org.apache.poi.ss.usermodel.Row;
import org.springframework.util.PropertyPlaceholderHelper;

import java.util.List;
import java.util.Properties;

public class DynamicValueCellWriteHandler implements CellWriteHandler {
    private String cellValue;
    private String cellWriterValue;
    private PropertyPlaceholderHelper propertyPlaceholderHelper = new PropertyPlaceholderHelper("${", "}");

    public DynamicValueCellWriteHandler(String cellValue, String cellWriterValue) {
        this.cellValue = cellValue;
        this.cellWriterValue = cellWriterValue;
    }

    @Override
    public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
                                 Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) {
        if (head != null) {
            List<String> headNameList = head.getHeadNameList();
            if (CollectionUtils.isNotEmpty(headNameList)) {
                Properties properties = new Properties();
                properties.setProperty("cellValue", cellValue);
                properties.setProperty("cellWriterValue", cellWriterValue);
                for (int i = 0; i < headNameList.size(); i++) {
                    headNameList.set(i, propertyPlaceholderHelper.replacePlaceholders(headNameList.get(i), properties));
                }
            }
        }
    }
}

2.在写入时使用自定义处理器

 excelWriter.write(excelCategoryDataList, EasyExcel.writerSheet(sheetName)
                            .head(Product.class)
                            .registerWriteHandler(new DynamicValueCellWriteHandler(cellValue, cellWriterValue))
                            .build());

相关推荐

  1. EasyExcel动态替换表头内容应用样式

    2024-07-11 13:02:04       9 阅读
  2. EasyExcel动态表头导出不生效

    2024-07-11 13:02:04       12 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 13:02:04       8 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 13:02:04       8 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 13:02:04       7 阅读
  4. Python语言-面向对象

    2024-07-11 13:02:04       10 阅读

热门阅读

  1. IPython的使用技巧整理

    2024-07-11 13:02:04       12 阅读
  2. uniapp踩坑小伎俩记录

    2024-07-11 13:02:04       8 阅读
  3. anaconda新建虚拟环境并同步至jupyter

    2024-07-11 13:02:04       9 阅读
  4. nftables(5)表达式(3)PAYLOAD EXPRESSIONS

    2024-07-11 13:02:04       9 阅读
  5. python程序打包成.exe

    2024-07-11 13:02:04       8 阅读
  6. Linux io_uring

    2024-07-11 13:02:04       10 阅读
  7. C#基于事件的异步模式实现实例

    2024-07-11 13:02:04       10 阅读
  8. Go bufio包

    2024-07-11 13:02:04       10 阅读
  9. 华为机考真题 -- 螺旋数字矩阵

    2024-07-11 13:02:04       10 阅读
  10. 常见消息队列及其对比

    2024-07-11 13:02:04       11 阅读