Easyexcel 填充模板文件时边框消失问题

在项目中使用Easyexcel进行模板写入时,遇到模板边框消失的问题。原因为数据填充时不包含样式信息。通过在bean的填充字段上添加Easyexcel的样式注解,可以解决这一问题。注解可以应用于类级别或属性级别,以控制单元格样式,如边框和字体。经过验证,注解方式有效,实现了模板导出时保持原始样式的期望效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Easyexcel 填充模板文件时边框消失问题


问题描述

第一次在项目中引入Easyexcel 使用了它的模板写入功能,但是设计“精美”的模板文件,在fill后发现边框不见了。
在这里插入图片描述
模板效果
在这里插入图片描述
导出效果


原因分析:

猜测,填充时数据类型传入普通的bean,其中属性未加任何样式注解;Easyexcel在填充模板时应用了默认单元格格式
在这里插入图片描述


解决方案:

试了一下在bean的填充字段上加上注解,再填充模板时会不会生效?
在这里插入图片描述
验证了一下样式效果生效了,添加边框字体生效。

Ps:验证了一下 Easyexcel 注解 可以直接注解类上,这样类中元素都默认添加该注解样式;如果还可以再单独注解在某属性上 生效原则类似于css就近原则,属性注解>类级注解

### 如何在 EasyExcel 中设置单元格边框加粗 为了实现单元格边框加粗的效果,在 `CustomCellWriteHandler` 类中可以重写 `onCellCreated` 方法来定制化单元格样式。通过调用 `CellStyleUtil.setBorder` 方法并传递相应的参数,能够指定边框的宽度和其他属性。 下面是一个具体的例子展示如何创建带有加粗边框样式的 Excel 文件: ```java import com.alibaba.excel.EasyExcel; import com.alibaba.excel.write.handler.AbstractCellWriteHandler; import org.apache.poi.ss.usermodel.*; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) throws Exception { // 指定输出的Excel文件路径 String excelFilePath = "example-write.xlsx"; // 设置要输出的数据内容 List<Person> personList = new ArrayList<>(); personList.add(new Person("a01", "张三", "男", 10)); personList.add(new Person("a02", "李四", "男", 20)); personList.add(new Person("a03", "王五", "女", 30)); CustomCellWriteHandler customCellWriteHandler = new CustomCellWriteHandler(); EasyExcel.write(excelFilePath, Person.class) .registerWriteHandler(customCellWriteHandler) .sheet("testSheet") .doWrite(personList); } } class CustomCellWriteHandler extends AbstractCellWriteHandler { @Override protected void onCellCreated(Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { super.onCellCreated(cell, head, relativeRowIndex, isHead); Workbook workbook = cell.getSheet().getWorkbook(); CellStyle style = workbook.createCellStyle(); Font font = workbook.createFont(); style.setFont(font); // 创建带加粗边框的样式 setBorder(style, BorderStyle.MEDIUM, IndexedColors.BLACK.getIndex()); cell.setCellStyle(style); } private void setBorder(CellStyle style, short borderStyle, short borderColor) { style.setBorderTop(borderStyle); style.setTopBorderColor(borderColor); style.setBorderBottom(borderStyle); style.setBottomBorderColor(borderColor); style.setBorderLeft(borderStyle); style.setLeftBorderColor(borderColor); style.setBorderRight(borderStyle); style.setRightBorderColor(borderColor); } } ``` 上述代码展示了怎样利用 `setBorder` 函数给选定区域内的所有边界应用相同的样式[^3]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值