alibaba / easyexcel

快速、简洁、解决大文件内存溢出的java处理Excel工具
https://easyexcel.opensource.alibaba.com
Apache License 2.0
32.69k stars 7.58k forks source link

1. 模板填充时, 导入数据上有类似 @DateFormat的注解,会导致最后一列的样式消失 #3982

Open 1363033915 opened 2 months ago

1363033915 commented 2 months ago

建议先去看文档

快速开始常见问题

触发场景描述

触发Bug的代码

   // 原因是 FillStyleCellWriteHandler 这个 handler 的问题
public void afterCellDispose(CellWriteHandlerContext context) {
        if (BooleanUtils.isTrue(context.getIgnoreFillStyle())) {
            return;
        }

        WriteCellData<?> cellData = context.getFirstCellData();
        if (cellData == null) {
            return;
        }
        WriteCellStyle writeCellStyle = cellData.getWriteCellStyle();
        CellStyle originCellStyle = cellData.getOriginCellStyle();
        if (writeCellStyle == null && originCellStyle == null) {
            return;
        }
        WriteWorkbookHolder writeWorkbookHolder = context.getWriteWorkbookHolder();

        // writeCellStyle 不为空, originCellStyle 这里是空的, 导致 setCellStyle 单元格原有的样式 消失
        // 修复 --------->  originCellStyle = context.getCell().getCellStyle(); 或则自己注册一个WriteHandler 在 afterCellDispose里将 FirstCellData 设置下 originCellStyle
        // 或是在 在源码在 CellWriteHandlerContext setFirstCellData 的时候将 originCellStyle 设置好
        context.getCell().setCellStyle(writeWorkbookHolder.createCellStyle(writeCellStyle, originCellStyle));
    }

1725854738895