1、概要
本文主要是介绍表格最后一行的样式设置,可以根据本文内容,拓展成每一行的样式设置
2、需求介绍
原来的表格如下,现在简单的想把合计行加粗
3、实现
在Excel中,设置行的样式是通过WriteCellStyle对象来实现的,可以从上图得知,现在生成的表格,每一行的样式都是一致的,原来的样式代码如下:
// 表格的内容样式
WriteCellStyle bodyStyle = new WriteCellStyle();
// 字体样式
bodyStyle.setWriteFont(ExcelUtil.setFont(12, "Arial", false));
// 设置边框
// bodyStyle.setBorderTop(BorderStyle.DOUBLE);
bodyStyle.setBorderLeft(BorderStyle.THIN);
bodyStyle.setBorderRight(BorderStyle.THIN);
bodyStyle.setBorderBottom(BorderStyle.THIN);
//设置样式策略 headStyle是头部样式,这里我就不写出来了
HorizontalCellStyleStrategy dataTableStrategy = new HorizontalCellStyleStrategy(headStyle, bodyStyle);
setFont方法是我改造的文本样式方法,代码如下:
public class ExcelUtil{
/**
* @purpose 设置字体
* @parameter name为null表示不设置字体
*/
public static WriteFont setFont(int size, String name, boolean condition) {
WriteFont font = new WriteFont();
// 大小
font.setFontHeightInPoints((short) size);
// 字体
if (!ObjectUtils.isEmpty(name)) {
font.setFontName(name);
}
// 是否加粗
font.setBold(condition);
return font;
}
}
改造开始:
首先来看看Excel的 HorizontalCellStyleStrategy策略的源码吧,看了你就知道easyExcel是怎么去实现每一行的样式了,源码如下:
来看看我之前样式实现时,调用HorizontalCellStyleStrategy的构造方法是什么?
public HorizontalCellStyleStrategy(WriteCellStyle headWriteCellStyle, WriteCellStyle contentWriteCellStyle) {
this.headWriteCellStyle = headWriteCellStyle;
if (contentWriteCellStyle != null) {
this.contentWriteCellStyleList = ListUtils.newArrayList(contentWriteCellStyle);
}
}
看看源码中的if语句中的代码:
this.contentWriteCellStyleList = ListUtils.newArrayList(contentWriteCellStyle);
这就是为什么我使用这句代码时,每一行的样式都是一致的了:
new HorizontalCellStyleStrategy(headStyle, bodyStyle);
重点1:
easyExcel会把我设置的表格样式bodyStyle进行遍历复制!生成一个list,从而实现每一行的样式效果
重点2:
HorizontalCellStyleStrategy还有一个构造方法,支持直接传入一个样式集合 List<WriteCellStyle> ,从而给每一行设置样式!
public HorizontalCellStyleStrategy(WriteCellStyle headWriteCellStyle,
List<WriteCellStyle> contentWriteCellStyleList) {
this.headWriteCellStyle = headWriteCellStyle;
this.contentWriteCellStyleList = contentWriteCellStyleList;
}
是不是有思路了?来实现吧
代码改造:
//表格的内容样式
WriteCellStyle bodyStyle = new WriteCellStyle();
// 字体样式
bodyStyle.setWriteFont(ExcelUtil.setFont(12, "Arial", false));
// 设置边框
// bodyStyle.setBorderTop(BorderStyle.DOUBLE);
bodyStyle.setBorderLeft(BorderStyle.THIN);
bodyStyle.setBorderRight(BorderStyle.THIN);
bodyStyle.setBorderBottom(BorderStyle.THIN);
// 1>创建最后一行的样式
WriteCellStyle lastRow = new WriteCellStyle();
// 2>设置加粗,其他样式保持一致
lastRow.setWriteFont(ExcelUtil.setFont(12, "Arial", true));
lastRow.setBorderLeft(BorderStyle.THIN);
lastRow.setBorderRight(BorderStyle.THIN);
lastRow.setBorderBottom(BorderStyle.THIN);
// 3>根据总行数],叠加生成最后一行的样式List
List<WriteCellStyle> preList = new ArrayList<>();
// 4>data是生成的表格数据集合,data.size()-1表示除最后一行的行数量
for (int i = 0; i < data.size()- 1; i++) {
preList.add(bodyStyle);
}
// 5>添加最后一行的样式
preList.add(lastRow);
// 6>创建策略,headStyle是头部样式,这里我就不写出来了
HorizontalCellStyleStrategy dataTableStrategy = new HorizontalCellStyleStrategy(headStyle, preList);
效果:
最后一行加粗啦!
4、拓展思路
本文只是设置了最后一行的样式,在实际开发中,我们可以要对每一行的样式进行自定义设置,当然,实际工作中,假如有20行,不可能每一行都设置不同的颜色吧,一般都是奇数行一个样式,偶数行一个样式!做法跟我上述的代码相似,只需要判断是否为奇(偶)数标识,生成list样式集合即可!
GitEE地址:仓库 – C﹏T (ct668) – Gitee.comhttps://gitee.com/ct668/dashboard/projects?sort=&scope=&state=public
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99598.html