📒 单元格样式
本节介绍 xlsx 文件单元格样式设置。
✅️ 样式对象CellStyle
样式对象用于保存单元格所有样式设置。
初始化参数:无
📌 导入和初始化
from DrissionRecord import CellStyle
s = CellStyle()
📌 样式属性
可设置样式包括以下属性:
font
:用于设置单元格字体border
:用于设置单元格边框alignment
:用于设置单元格对齐方式pattern_fill
:用于设置单元格图案填充,与gradient_fill
互斥gradient_fill
:用于设置单元格渐变填充,与pattern_fill
互斥number_format
:用于设置单元格数字格式protection
:用于设置单元格保护选项
使用方法:
from DrissionRecord import CellStyle
s = CellStyle()
s.font.set_bold(True) # 设置文本加粗
s.alignment.set_horizontal('center') # 设置水平居中
s.border.set_quad('thin', 'yellow') # 设置边框
📌 常用简化设置
对于常用样式设置,提供了更便捷的 api,且支持链式操作。
非常用设置还是要用完整写法。
完整写法:
from DrissionRecord import CellStyle
s = CellStyle()
s.font.set_bold(True)
s.pattern_fill.set_bgColor('green')
s.border.set_quad('thin', 'black')
下面代码实现一样的功能,更简洁。
from DrissionRecord import CellStyle
s = CellStyle().set_bold().set_bgColor('green').set_border()
✅️ 设置单元格样式
💡 add_styles()
此方法用于为单元格设置样式,可批量设置指定范围内的单元格。
可设置范围:
- 单个单元格:传入单元格坐标,格式
'A1'
、(1, 1)
、(1, 'A')
均可 - 整行:传入行号,
int
格式,如1
- 连续多行:传入
':'
分隔的起止行 号,如'1:10'
- 整列:传入列号,
str
格式,如'A'
- 连续整列:传入
':'
分隔的起止列号,如'A:D'
- 指定范围:传入
'A1:B3'
格式字符串,指定一个矩形范围
以上范围均可接收多个样式对象,会对指定范围进行平铺。
以上坐标数字支持设置为负值(代表从后往前数)或0
(代表新行)。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
styles | CellStyle list tuple dict | 必填 | 传入CellStyle 对象设置整个新行,传入CellStyle 对象组成的列表设置多个,传入None 清空设置 |
coord | int str tuple list | 必填 | 单元格坐标,输入数字代表行,传入字母代表列号,传入tuple 为单元格坐标,传入'A1:C5' 、'a:d' 、'1:5' 格式可设置指定范围 |
replace | bool | True | 是否直接覆盖所有已有样式,如为False 只替换设置的属性 |
table | str True None | None | 数据表名。为None 表示用set.table() 方法设置的值,为Ture 表示活动的表格 |
返回类型:None
from DrissionRecord import Recorder, CellStyle
s = CellStyle().set_bgColor('red')
r = Recorder('data.xlsx')
r.add_styles(s, 'a1') # 设置A1单元格样式
r.record()
📌 指向单元格坐标
coord
传入单个单元格坐标,可对从这个单元格开始向右的单元格设置样式。
单元格坐标格式可以是字符串'A1'
(不区分大小写),或者tuple
格式(1, 1)
、(1, 'A')
(行, 列)。
从传入坐标的单元格开始,把styles
参数传入的CellStyle
对象设置完为止。
from DrissionRecord import Recorder, CellStyle
s1 = CellStyle().set_bgColor('red')
s2 = CellStyle().set_bgColor('green')
s3 = CellStyle().set_bgColor('blue')
r = Recorder('data.xlsx')
r.add_styles(s1, 'A1') # 只对A1单元格设置样式
r.add_styles(s1, (2, 1)) # 只对第2行第一列单元格设置样式
r.add_styles([s1, s2, s3], 'b2') # 对B2、C2、D2三个单元格分别设置s1、s2、s3样式
r.record()
📌 为匹配的列设置样式
当styles
参数传入dict
格式,可为不同的列指定不同样式,会根据列序号或表头值自动匹配。
此时coord
参数设置的坐标只有行号生效,也可用int
格式直接指定某行。
说明
当dict
的 key 为int
时,视作列序号,从 1 开始。
当为str
时,视作表头值。如要用列号'A'
,可导入Col()
方法进行转换。
from DrissionRecord import Recorder, CellStyle, Col
s1 = CellStyle().set_bgColor('red')
s2 = CellStyle().set_bgColor('green')
s3 = CellStyle().set_bgColor('blue')
r = Recorder('data.xlsx')
styles = {1: s1, # 第一列设置s1样式
'学号': s2, # 表头为“学号”的列设置s2样式
Col('c'): s3 # C列设置s3样式
}
r.add_styles(styles, 3) # 为第三行数据设置该样式
r.add_styles(styles, 'A4') # 为第四行数据设置该样式(忽略列号)
r.add_styles(styles, (5, 5)) # 为第五行数据设置该样式(忽略列序号)
r.record()
📌 为整行整列设置样式
当coord
传入int
格式,为整行设置样式,序号从 1 开始。
当传入字母列号,为整列设置样式。
可用'A:C'
和'1:3'
格式设置连续多列或多行。
说明
- 行号可以是负数,代表从后向前数
- 传入的
CellStyle
对象数量如少于单元格数,会不断重复这些样式,直到全部设置完。
from DrissionRecord import Recorder, CellStyle
s1 = CellStyle().set_bgColor('red')
s2 = CellStyle().set_bgColor('green')
r = Recorder('data.xlsx')
r.add_styles(s1, 'A') # 把整个A列的单元格设置样式s1
r.add_styles(s1, 1) # 把第一行整行单元格设置样式s1
r.add_styles([s1, s2], 'b') # 对B列所有单元格循环设置样式
r.add_styles([s1, s2], 2) # 对第二行所有单元格循环设置样式
r.add_styles([s1, s2], 'C:E') # 对C到E列所有单元格循环设置样式
r.add_styles([s1, s2], '5:7') # 对第五到第七行所有单元格循环设置样式
r.add_styles([s1, s2], '-5:-7') # 对倒数第七行到倒数第五行所有单元格循环设置样式
r.record()
📌 为矩形区域设置样式
coord
参数传入'A1:D5'
格式字符串,可对这两个单元格为对角的区域设置样式。
styles
参数可以用list
传入多个样式,会逐行平铺指定区域。
说明
- 行号可以是负数,代表从后向前数
- 传入的
CellStyle
对象数量如少于单元格数,会不断重复这些样式,直到全部设置完。
from DrissionRecord import Recorder, CellStyle
s1 = CellStyle().set_bgColor('red')
s2 = CellStyle().set_bgColor('green')
r = Recorder('data.xlsx')
r.add_styles(s1, 'A1:D5') # 把A1:D5范围内单元格设置样式s1
r.add_styles([s1, s2], 'C3:E7') # 把C3:E7范围内单元格设置样式s1和s2
r.add_styles([s1, s2], 'C-3:E-7') # -3代表倒数第三行,-7代表倒数第七行
r.record()