Easyexcel(7-自定义样式)

相关文章链接

  1. Easyexcel(1-注解使用)
  2. Easyexcel(2-文件读取)
  3. Easyexcel(3-文件导出)
  4. Easyexcel(4-模板文件)
  5. Easyexcel(5-自定义列宽)
  6. Easyexcel(6-单元格合并)
  7. Easyexcel(7-自定义样式)

注解

@ContentStyle

用于设置内容格式注解,可作用于类和字段上

  1. dataFormat:日期格式
  2. hidden:设置单元格使用此样式隐藏
  3. locked:设置单元格使用此样式锁定
  4. quotePrefix:在单元格前面增加`符号,数字或公式将以字符串形式展示
  5. horizontalAlignment:设置是否水平居中
  6. wrapped:设置文本是否应换行。将此标志设置为true通过在多行上显示使单元格中的所有内容可见
  7. verticalAlignment:设置是否垂直居中
  8. rotation:设置单元格中文本旋转角度。03版本的Excel旋转角度区间为-90°90°,07版本的Excel旋转角度区间为0°180°
  9. indent:设置单元格中缩进文本的空格数
  10. borderLeft:设置左边框的样式
  11. borderRight:设置右边框样式
  12. borderTop:设置上边框样式
  13. borderBottom:设置下边框样式
  14. leftBorderColor:设置左边框颜色
  15. rightBorderColor:设置右边框颜色
  16. topBorderColor:设置上边框颜色
  17. bottomBorderColor:设置下边框颜色
  18. fillPatternType:设置填充类型
  19. fillBackgroundColor:设置背景色
  20. fillForegroundColor:设置前景色
  21. shrinkToFit:设置自动单元格自动大小

@ContentFontStyle

用于设置单元格内容字体格式的注解,可作用于类和字段上

  1. fontName:字体名称
  2. fontHeightInPoints:字体高度
  3. italic:是否斜体
  4. strikeout:是否设置删除水平线
  5. color:字体颜色
  6. typeOffset:偏移量
  7. underline:下划线
  8. bold:是否加粗
  9. charset:编码格式

@HeadStyle

用于设置标题样式,可作用于类和字段上

  1. dataFormat:日期格式
  2. hidden:设置单元格使用此样式隐藏
  3. locked:设置单元格使用此样式锁定
  4. quotePrefix:在单元格前面增加`符号,数字或公式将以字符串形式展示
  5. horizontalAlignment:设置是否水平居中
  6. wrapped:设置文本是否应换行。将此标志设置为true通过在多行上显示使单元格中的所有内容可见
  7. verticalAlignment:设置是否垂直居中
  8. rotation:设置单元格中文本旋转角度。03版本的Excel旋转角度区间为-90°90°,07版本的Excel旋转角度区间为0°180°
  9. indent:设置单元格中缩进文本的空格数
  10. borderLeft:设置左边框的样式
  11. borderRight:设置右边框样式
  12. borderTop:设置上边框样式
  13. borderBottom:设置下边框样式
  14. leftBorderColor:设置左边框颜色
  15. rightBorderColor:设置右边框颜色
  16. topBorderColor:设置上边框颜色
  17. bottomBorderColor:设置下边框颜色
  18. fillPatternType:设置填充类型
  19. fillBackgroundColor:设置背景色
  20. fillForegroundColor:设置前景色
  21. shrinkToFit:设置自动单元格自动大小

@HeadFontStyle

用于定制标题字体格式,可作用于类和字段上

  1. fontName:设置字体名称
  2. fontHeightInPoints:设置字体高度
  3. italic:设置字体是否斜体
  4. strikeout:是否设置删除线
  5. color:设置字体颜色
  6. typeOffset:设置偏移量
  7. underline:设置下划线
  8. charset:设置字体编码
  9. bold:设置字体是否加粗

类方法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

AbstractCellStyleStrategy

通过继承AbstractCellStyleStrategy类,实现其setHeadCellStyle和setContentCellStyle方法可以自定义设置表头和单元格内容样式

public abstract class AbstractCellStyleStrategy implements CellWriteHandler {@Overridepublic int order() {return OrderConstant.DEFINE_STYLE;}@Overridepublic void afterCellDispose(CellWriteHandlerContext context) {if (context.getHead() == null) {return;}if (context.getHead()) {setHeadCellStyle(context);} else {setContentCellStyle(context);}}/*** 设置表头样式*/protected void setHeadCellStyle(CellWriteHandlerContext context) {setHeadCellStyle(context.getCell(), context.getHeadData(), context.getRelativeRowIndex());}/*** 设置表头样式*/protected void setHeadCellStyle(Cell cell, Head head, Integer relativeRowIndex) {throw new UnsupportedOperationException("Custom styles must override the setHeadCellStyle method.");}/*** 设置单元格内容样式*/protected void setContentCellStyle(CellWriteHandlerContext context) {setContentCellStyle(context.getCell(), context.getHeadData(), context.getRelativeRowIndex());}/*** 设置单元格内容样式*/protected void setContentCellStyle(Cell cell, Head head, Integer relativeRowIndex) {throw new UnsupportedOperationException("Custom styles must override the setContentCellStyle method.");}
}

HorizontalCellStyleStrategy

HorizontalCellStyleStrategy 是提供的一个水平样式策略,只需实现CellWriteHandlerContext类自定义样式即可,通过设置构建这个策略对象基本上可以满足一般的要求了,比如:设置表头和内容的边框、底色、对齐方式、文字字体、文字颜色、文字大小等。设置完之后,需要创建 HorizontalCellStyleStrategy 对象,然后在导出文件时注册这个策略的 handler 即可。

Getter
@Setter
@EqualsAndHashCode
public class HorizontalCellStyleStrategy extends AbstractCellStyleStrategy {private WriteCellStyle headWriteCellStyle;private List<WriteCellStyle> contentWriteCellStyleList;public HorizontalCellStyleStrategy() {}public HorizontalCellStyleStrategy(WriteCellStyle headWriteCellStyle,List<WriteCellStyle> contentWriteCellStyleList) {this.headWriteCellStyle = headWriteCellStyle;this.contentWriteCellStyleList = contentWriteCellStyleList;}public HorizontalCellStyleStrategy(WriteCellStyle headWriteCellStyle, WriteCellStyle contentWriteCellStyle) {this.headWriteCellStyle = headWriteCellStyle;if (contentWriteCellStyle != null) {this.contentWriteCellStyleList = ListUtils.newArrayList(contentWriteCellStyle);}}/*** 设置表头样式*/@Overrideprotected void setHeadCellStyle(CellWriteHandlerContext context) {if (stopProcessing(context) || headWriteCellStyle == null) {return;}WriteCellData<?> cellData = context.getFirstCellData();WriteCellStyle.merge(headWriteCellStyle, cellData.getOrCreateStyle());}/*** 设置单元格内容样式*/@Overrideprotected void setContentCellStyle(CellWriteHandlerContext context) {if (stopProcessing(context) || CollectionUtils.isEmpty(contentWriteCellStyleList)) {return;}WriteCellData<?> cellData = context.getFirstCellData();if (context.getRelativeRowIndex() == null || context.getRelativeRowIndex() <= 0) {WriteCellStyle.merge(contentWriteCellStyleList.get(0), cellData.getOrCreateStyle());} else {WriteCellStyle.merge(contentWriteCellStyleList.get(context.getRelativeRowIndex() % contentWriteCellStyleList.size()),cellData.getOrCreateStyle());}}/*** 判断单元格是否为空*/protected boolean stopProcessing(CellWriteHandlerContext context) {return context.getFirstCellData() == null;}
}

DefaultStyle

Easyexcel在导出文件内容时默认使用DefaultStyle类来设置表头和单元格样式

public class DefaultStyle extends HorizontalCellStyleStrategy {@Overridepublic int order() {return OrderConstant.DEFAULT_DEFINE_STYLE;}public DefaultStyle() {super();WriteCellStyle headWriteCellStyle = new WriteCellStyle();headWriteCellStyle.setWrapped(true);headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);headWriteCellStyle.setLocked(true);headWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);headWriteCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());headWriteCellStyle.setBorderTop(BorderStyle.THIN);headWriteCellStyle.setBorderBottom(BorderStyle.THIN);headWriteCellStyle.setBorderLeft(BorderStyle.THIN);headWriteCellStyle.setBorderRight(BorderStyle.THIN);WriteFont headWriteFont = new WriteFont();headWriteFont.setFontName("宋体");headWriteFont.setFontHeightInPoints((short)14);headWriteFont.setBold(true);headWriteCellStyle.setWriteFont(headWriteFont);setHeadWriteCellStyle(headWriteCellStyle);}
}

Easyexcel的默认风格是,对于表头会显示灰色背景,但是如果取消使用默认风格之后,表头的背景颜色就会恢复白色

Easyexcel控制是否开启默认风格的属性方法是:useDefaultStyle(false)

注意:useDefaultStyle方法一定要放在sheet方法前面,否则会失效(放在后面会因为在构造ExcelWriter类时获取不到useDefaultStyle的值,从而导致使用的是默认风格)

public void test01() {EasyExcel.write("test01.xlsx", DemoData.class)//禁用默认风格.useDefaultStyle(false).sheet("testSheet01").doWrite(demoData);
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

样式工具类

/*** EasyExcel 样式工具类*/
public class CustomExcelStyleUtil {/*** 标题样式** @return*/public static WriteCellStyle getHeadStyle() {// 头的策略WriteCellStyle headWriteCellStyle = new WriteCellStyle();// 背景颜色//headWriteCellStyle.setFillForegroundColor(IndexedColors.LIGHT_TURQUOISE1.getIndex());//headWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);// 字体WriteFont headWriteFont = new WriteFont();headWriteFont.setFontName("宋体");//设置字体名字headWriteFont.setFontHeightInPoints((short) 14);//设置字体大小headWriteFont.setBold(true);//字体加粗headWriteCellStyle.setWriteFont(headWriteFont); //在样式用应用设置的字体;// 样式headWriteCellStyle.setBorderBottom(BorderStyle.THIN);//设置底边框;headWriteCellStyle.setBottomBorderColor((short) 0);//设置底边框颜色;headWriteCellStyle.setBorderLeft(BorderStyle.THIN);  //设置左边框;headWriteCellStyle.setLeftBorderColor((short) 0);//设置左边框颜色;headWriteCellStyle.setBorderRight(BorderStyle.THIN);//设置右边框;headWriteCellStyle.setRightBorderColor((short) 0);//设置右边框颜色;headWriteCellStyle.setBorderTop(BorderStyle.THIN);//设置顶边框;headWriteCellStyle.setTopBorderColor((short) 0); //设置顶边框颜色;headWriteCellStyle.setWrapped(true);  //设置自动换行;headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);//设置水平对齐的样式为居中对齐;headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);  //设置垂直对齐的样式为居中对齐;headWriteCellStyle.setShrinkToFit(true);//设置文本收缩至合适return headWriteCellStyle;}/*** 内容样式** @return*/public static WriteCellStyle getContentStyle() {// 内容的策略WriteCellStyle contentWriteCellStyle = new WriteCellStyle();// 背景颜色// 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定//contentWriteCellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());//contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);// 设置字体WriteFont contentWriteFont = new WriteFont();contentWriteFont.setFontHeightInPoints((short) 12);//设置字体大小contentWriteFont.setFontName("宋体"); //设置字体名字contentWriteCellStyle.setWriteFont(contentWriteFont);//在样式用应用设置的字体;//设置样式;contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);//设置底边框;contentWriteCellStyle.setBottomBorderColor((short) 0);//设置底边框颜色;contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);  //设置左边框;contentWriteCellStyle.setLeftBorderColor((short) 0);//设置左边框颜色;contentWriteCellStyle.setBorderRight(BorderStyle.THIN);//设置右边框;contentWriteCellStyle.setRightBorderColor((short) 0);//设置右边框颜色;contentWriteCellStyle.setBorderTop(BorderStyle.THIN);//设置顶边框;contentWriteCellStyle.setTopBorderColor((short) 0); ///设置顶边框颜色;contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);// 水平居中contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 垂直居中contentWriteCellStyle.setWrapped(true); //设置自动换行;contentWriteCellStyle.setShrinkToFit(true);//设置文本收缩至合适return contentWriteCellStyle;}
}
@Data
public class User {@ExcelProperty(value = "用户Id")private Integer userId;@ExcelProperty(value = "姓名")private String name;@ExcelProperty(value = "手机")private String phone;@ExcelProperty(value = "邮箱")private String email;@ExcelProperty(value = "创建时间")private Date createTime;
}
@GetMapping("/download1")
public void download1(HttpServletResponse response) {try {response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf-8");// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xls");User user = new User();user.setUserId(123);user.setName("as");user.setPhone("15213");user.setEmail("5456");user.setCreateTime(new Date());EasyExcel.write(response.getOutputStream(), User.class).sheet("模板").registerWriteHandler(new HorizontalCellStyleStrategy(CustomExcelStyleUtil.getHeadStyle(), CustomExcelStyleUtil.getContentStyle())).doWrite(Arrays.asList(user));} catch (Exception e) {e.printStackTrace();}
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/60879.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通用网络安全设备之【防火墙】

概念&#xff1a; 防火墙&#xff08;Firewall&#xff09;&#xff0c;也称防护墙&#xff0c;它是一种位于内部网络与外部网络之间的网络安全防护系统&#xff0c;是一种隔离技术&#xff0c;允许或是限制传输的数据通过。 基于 TCP/IP 协议&#xff0c;主要分为主机型防火…

对于GC方面,在使用Elasticsearch时要注意什么?

大家好&#xff0c;我是锋哥。今天分享关于【对于GC方面&#xff0c;在使用Elasticsearch时要注意什么&#xff1f;】面试题。希望对大家有帮助&#xff1b; 对于GC方面&#xff0c;在使用Elasticsearch时要注意什么&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java…

[仓颉Cangjie刷题模板] 优先队列(含小顶堆实现)

[TOC]([仓颉Cangjie刷题模板] 优先队列(含小顶堆实现) ) 一、 算法&数据结构 1. 描述 堆是一个可以维护实时最大/最小值的数据结构&#xff0c;相比treeset等常数优很多。 常用于维护一组数据的极值贪心问题。2. 复杂度分析 初始化O(n)查询O(1)修改O(lgn) 3. 常见应用…

解决 MySQL 5.7 安装中的常见问题及解决方案

目录 前言1. 安装MySQL 5.7时的常见错误分析1.1 错误原因及表现1.2 错误的根源 2. 解决方案2.1 修改YUM仓库配置2.2 重新尝试安装2.3 处理GPG密钥错误2.4 解决依赖包问题 3. 安装成功后的配置3.1 启动MySQL服务3.2 获取临时密码3.3 修改root密码 4. 结语 前言 在Linux服务器上…

计算机网络 网络安全基础——针对实习面试

目录 网络安全基础你了解被动攻击吗&#xff1f;你了解主动攻击吗&#xff1f;你了解病毒吗&#xff1f;说说基本的防护措施和安全策略&#xff1f; 网络安全基础 网络安全威胁是指任何可能对网络系统造成损害的行为或事件。这些威胁可以是被动的&#xff0c;也可以是主动的。…

oracle小技巧-解决特殊密码字符而导致的exp错误

在使用oracle数据库的时候&#xff0c;我们经常会利用exp工具对某些表进行导出。但有些时候&#xff0c;因我们用户密码为安全性设有特殊字符&#xff0c;导致exp导出时候报&#xff1a;“EXP-00056和ORA-12154”&#xff0c;今天我们就分享下如何通过设置符号隔离的小技巧解决…

Taro 鸿蒙技术内幕系列(三) - 多语言场景下的通用事件系统设计

基于 Taro 打造的京东鸿蒙 APP 已跟随鸿蒙 Next 系统公测&#xff0c;本系列文章将深入解析 Taro 如何实现使用 React 开发高性能鸿蒙应用的技术内幕 背景 在鸿蒙生态系统中&#xff0c;虽然原生应用通常基于 ArkTS 实现&#xff0c;但在实际研发过程中发现&#xff0c;使用 C…

带有悬浮窗功能的Android应用

android api29 gradle 8.9 要求 布局文件 (floating_window_layout.xml): 增加、删除、关闭按钮默认隐藏。使用“开始”按钮来控制这些按钮的显示和隐藏。 服务类 (FloatingWindowService.kt): 实现“开始”按钮的功能&#xff0c;点击时切换增加、删除、关闭按钮的可见性。处…

ML 系列:第 36 节 — 统计学中的抽样类型

ML 系列&#xff1a;第 36 天 — 统计学中的抽样类型 文章目录 一、说明二、抽样方法三、简单随机抽样四、 Stratified Sampling分层抽样五、 Cluster Sampling 整群抽样六、Systematic Sampling系统抽样七、Convenience Sampling便利抽样八、结论 一、说明 统计学中的抽样类型…

CGMA – Cloth Creation and Simulation for Real-Time

CGMA – 实时布料创建和模拟 Info&#xff1a; 本课程介绍如何将 Marvelous Designer 整合到布料工作流程中以实时创建角色&#xff0c;从软件基础知识到创建逼真和风格化服装的高级技术。本课程将首先介绍软件&#xff0c;通过创建现代、现代的服装&#xff0c;然后深入探讨使…

Springboot组合SpringSecurity安全插件基于密码的验证Demo

Springboot组合SpringSecurity安全插件基于密码的验证Demo!下面的案例&#xff0c;都是基于数据库mysql&#xff0c;用户密码&#xff0c;验证登录的策略demo。 1&#xff1b;引入maven仓库的坐标 <dependency><groupId>org.springframework.boot</groupId>…

从Full-Text Search全文检索到RAG检索增强

从Full-Text Search全文检索到RAG检索增强 时光飞逝&#xff0c;转眼间六年过去了&#xff0c;六年前铁蛋优化单表千万级数据查询性能的场景依然历历在目&#xff0c;铁蛋也从最开始做CRUD转行去了大数据平台开发&#xff0c;混迹包装开源的业务&#xff0c;机缘巧合下做了实时…

单片机学习笔记 8. 矩阵键盘按键检测

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘 目录 0、实现的…

【AI日记】24.11.26 聚焦 kaggle 比赛

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 核心工作 1 内容&#xff1a;研究 kaggle 比赛时间&#xff1a;3 小时 核心工作 2 内容&#xff1a;学习 kaggle 比赛 Titanic - Machine Learning from Disaster时间&#xff1a;4 小时备注&#xff1a;这…

排序算法2

排序算法1-CSDN博客 排序算法1中提及的是较为基础(暴力实现&#xff0c;复杂度较高)的排序算法&#xff0c;不适合于数据量较大的场景&#xff0c;比如序列长度达到1e5 接下来以蓝桥另一道题目来理解其它的排序算法 蓝桥3226 蓝桥账户中心 样例 5 1 5 9 3 7 4、快速排序 快速排…

【数据结构实战篇】用C语言实现你的私有队列

&#x1f3dd;️专栏&#xff1a;【数据结构实战篇】 &#x1f305;主页&#xff1a;f狐o狸x 在前面的文章中我们用C语言实现了栈的数据结构&#xff0c;本期内容我们将实现队列的数据结构 一、队列的概念 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端…

macos 14.0 Monoma 修改顶部菜单栏颜色

macos 14.0 设置暗色后顶部菜单栏还维持浅色&#xff0c;与整体不协调。 修改方式如下&#xff1a;

长三角文博会:Adobe国际认证体系推动设计人才评价新标准

2024年11月22日&#xff0c;由上海、江苏、浙江、安徽三省一市党委宣传部共同发起的第五届长三角文化博览会&#xff08;简称“长三角文博会”&#xff09;在上海国家会展中心盛大启幕。长三角文博会自2018年起已成功举办多届&#xff0c;已成为展示区域文化产业发展成果、推动…

安装数据库客户端工具

如果没有勾选下面的&#xff0c;可以运行下面的两个命令 红框为自带数据库 新建数据库 右键运行mysql文件&#xff0c;找到数据库&#xff0c;并刷新

SQL 复杂查询

目录 复杂查询 一、目的和要求 二、实验内容 &#xff08;1&#xff09;查询出所有水果产品的类别及详情。 查询出编号为“00000001”的消费者用户的姓名及其所下订单。&#xff08;分别采用子查询和连接方式实现&#xff09; 查询出每个订单的消费者姓名及联系方式。 在…