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();
相关推荐
喝水的长颈鹿15 分钟前
【大白话前端 03】Web 标准与最佳实践
前端
爱泡脚的鸡腿16 分钟前
Node.js 拓展
前端·后端
左夕1 小时前
分不清apply,bind,call?看这篇文章就够了
前端·javascript
Zha0Zhun2 小时前
一个使用ViewBinding封装的Dialog
前端
兆子龙2 小时前
从微信小程序 data-id 到 React 列表性能优化:少用闭包,多用 data-*
前端
滕青山2 小时前
文本行过滤/筛选 在线工具核心JS实现
前端·javascript·vue.js
时光不负努力2 小时前
编程常用模式集合
前端·javascript·typescript
恋猫de小郭2 小时前
Apple 的 ANE 被挖掘,AI 硬件公开,宣传的 38 TOPS 居然是"数字游戏"?
前端·人工智能·ios
小岛前端2 小时前
Node.js 宣布重大调整,运行十年的规则要改了!
前端·node.js
OpenTiny社区2 小时前
OpenTiny NEXT-SDK 重磅发布:四步把你的前端应用变成智能应用
前端·javascript·ai编程