EasyExcel使用模版填充的方式,导致单元格边框消失

1、源代码,使用writer.fill()这种方式,生成的excel发现最下边的边框消失,我的模版最下边的是厚实线,导出后,变成了细实线

复制代码
ExcelWriter writer = EasyExcel.write(response.getOutputStream())
        .registerWriteHandler(customStyleHandler)
        .withTemplate(getInputStream("Y4-06.xlsx"))
        .build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
writer.fill(data, writeSheet);
writer.fill(dataList, writeSheet);
writer.finish();

2、解决办法

第一种:如果你的数据载体是对象,那么你可以直接在对象的实体上加上一下注解 ,但是这种的会让你导出的每一行的底边框全部为注解设置的样式。

复制代码
@ContentStyle(borderBottom = BorderStyleEnum.THICK)

第二种:增加自定义样式处理器,直接上代码

复制代码
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.handler.context.CellWriteHandlerContext;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Workbook;

public class CustomCellStyleHandler implements CellWriteHandler {
    @Override
    public void afterCellDispose(CellWriteHandlerContext context) {
        if (context.getHead()) return; // 跳过表头

        Workbook workbook = context.getWriteWorkbookHolder().getWorkbook();

        if (context.getCell().getRowIndex() == 15) {
            CellStyle style = workbook.createCellStyle();
            style.cloneStyleFrom(context.getCell().getCellStyle());

            WriteCellStyle writeCellStyle = new WriteCellStyle();
            writeCellStyle.setBorderBottom(BorderStyle.THICK);
            context.getCellDataList().get(0).setWriteCellStyle(writeCellStyle);
        }
    }
}

以上代码有几个点要注意:

接口类CellWriteHandler

重写方法afterCellDispose

最为重点的是context.getCellDataList().get(0).setWriteCellStyle(writeCellStyle),一定要用WriteCellStyle来设置你的样式,我看网上有的用CellStyle,不起作用,这个我查了下,WriteCellStyle是EasyExcel自己的,CellStyle是POI的,不知道具体什么个原因。

复制代码
CellWriteHandler customStyleHandler = new CustomCellStyleHandler();
ExcelWriter writer = EasyExcel.write(response.getOutputStream())
        .registerWriteHandler(customStyleHandler)
        .withTemplate(getInputStream("Y4-06.xlsx"))
        .build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
writer.fill(data, writeSheet);
writer.fill(dataList, writeSheet);
writer.finish();
相关推荐
leoZ23112 小时前
第 6 篇:SchemaForm 渲染器核心实现
前端·javascript·vue.js·人工智能·神经网络·机器学习·自然语言处理
CoderYanger13 小时前
前端基础——JavaScript(基础语法)(下篇)
java·开发语言·前端·javascript·程序人生·面试·职场和发展
还是大剑师兰特13 小时前
vue项目浏览器版本判别,低于IE11跳转到新页面
前端·javascript·vue.js
计算机魔术师13 小时前
奥尔特曼致歉 GPT-6 Astra 发布混乱,现已面向所有 Plus / Pro 等用户推出
前端
落樱弥城13 小时前
RHI 设计考量:不同 API 差异分析
服务器·前端·性能优化
热心网友俣先生13 小时前
2026国赛C题:五年命题规律与预测
java·c语言·前端·数学建模
BestHeaker15 小时前
跨企业接口对接:IQDS / CPK 数据解析与协作避坑指南(五)
java·服务器·前端
青花锁15 小时前
OpenAI Function Calling 完全指南:让大模型安全调用你的业务系统
前端·安全·functioncalling
俊昭喜喜里15 小时前
C#中的func<>
java·前端·c#
BillKu16 小时前
vue3 字符串排序 localeCompare,确保排序为 “B01“, “B10“, “B2“
前端·javascript·vue.js