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();
相关推荐
Full Stack Developme7 分钟前
跨站请求伪造 (CSRF) 是什么 设计及工作原理
前端·okhttp·csrf
MoSTChillax15 分钟前
UI规范设计:从视觉到交互的全面指南
前端·ui·产品经理·设计规范·vibecoding
雪碧聊技术37 分钟前
Vue + Element Plus 实现文本溢出显示省略号及悬浮提示
前端·javascript·css·vue.js·文本溢出省略
eric-sjq39 分钟前
0.6B 前端生成模型本地部署实战:消费级显卡跑通 WanlyFrontend 全流程
前端·本地部署
小妖6662 小时前
设置了 box-sizing: border-box; 不管用,下边框还是被挤压没了
前端·css·html
雪隐2 小时前
个人电脑玩AI-16让5060 Ti给你打工——5060Ti 16G 跑 MiniMax-Music-3:从下载到 60s 出歌的全流程
前端·人工智能·后端
CAD老兵3 小时前
让 AI Coding Agent 直接访问 CAD 文档:GitMCP 实战指南
前端·人工智能·github
程序员鱼皮4 小时前
DeepSeek Harness 最新邪修曝光!被吹成核弹的极简模式,真的夯吗?
前端·后端·ai编程
无己心4 小时前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
袅沫4 小时前
Nginx中部署多个前端项目——区分路径
服务器·前端