📒 单元格样式
本节介绍 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 | CellStylelisttupledict | 必填 | 传入CellStyle对象设置整个新行,传入CellStyle对象组成的列表设置多个,传入None清空设置 |
coord | intstrtuplelist | 必填 | 单元格坐标,输入数字代表行,传入字母代表列号,传入tuple为单元格坐标,传入'A1:C5'、'a:d'、'1:5'格式可设置指定范围 |
replace | bool | True | 是否直接覆盖所有已有样式,如为False只替换设置的属性 |
table | strTrueNone | 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()
✅️ 跟随上一行的样式
使用set.follow_styles()可设置新填入的数据自动设置为上一行的样式。
如果是插入新行,会复制上一行整行样式,即使有些单元格没有数据。
如果是指定位置填入数据,则只会复制数据所在列上一个单元格的样式。
from DrissionRecord import Recorder
r = Recorder('data.xlsx')
r.set.follow_styles()
✅️ 设置新行默认样式
📌 set.new_row_styles()
此方法用于设置新行样式,只有xlsx格式有效,可传入多个样式,传入None则取消。
传入多个样式对象时,只会对指定位置单元格进行设置,不会铺满整列。
传入dict格式时,可对指定列设置特定样式。键是int时表示列序号,键是str时表示表头值。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
styles | CellStylelisttupledict | 必填 | 传入CellStyle对象设置整个新行,传入CellStyle对象组成的列表设置多个,传入None清空设置 |
| 返回类型 | 说明 |
|---|---|
RecorderSetter | 设置对象 |
💡 传入单个样式对象:
from DrissionRecord import Recorder, CellStyle
s = CellStyle().set_bgColor('red')
r = Recorder('data.xlsx')
r.set.new_row_styles(s)
💡 传入多个样式对象:
from DrissionRecord import Recorder, CellStyle
s1 = CellStyle().set_bgColor('red')
s2 = CellStyle().set_bgColor('green')
r = Recorder('data.xlsx')
r.set.new_row_styles([s1, s2]) # 设置第一、第二列样式
💡 传入dict格式样式:
如要根据列号匹配,可用Col()方法把列号转换为数字。
from DrissionRecord import Recorder, CellStyle, Col
s1 = CellStyle().set_bgColor('red')
s2 = CellStyle().set_bgColor('green')
r = Recorder('data.xlsx')
r.set.new_row_styles({1: s1, '年龄': s2, Col('c'): s1}) # 设置第一列样式为c1,'年龄'列样式为c2,c列样式为c1
📌 set.new_row_height()
此方法用于设置新行行高。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
height | floatNone | 必填 | 行高,传入None清空设置 |
| 返回类型 | 说明 |
|---|---|
RecorderSetter | 设置对象 |
from DrissionRecord import Recorder
r = Recorder('data.xlsx')
r.set.new_row_height(30)
✅️ set.link_style()
设 置超链接默认样式方法用于设置添加到文档的超链接默认样式。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
style | CellStyleTrue | True | 样式对象,为Ture时用预设样式(蓝字下划线) |
| 返回类型 | 说明 |
|---|---|
RecorderSetter | 设置对象 |
from DrissionRecord import Recorder, CellStyle
s = CellStyle().set_txtColor('blue').set_underLine()
r = Recorder('data.xlsx')
r.set.link_style(s)
✅️ 设置行高和列宽
📌 add_rows_height()
此方法用于设置指定行的高度,可设置多行。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
height | float | 必填 | 行高 |
rows | intstrlisttupleTrue | 必填 | 行号,可指定多行,如1、'1:4'、[1, 2, 3],为Ture设置所有行 |
table | strTrueNone | None | 数据表名,为None表示用set.table()方法设置的值,为Ture表示活动的表格 |
返回:None
from DrissionRecord import Recorder
r = Recorder('data.xlsx')
r.add_rows_height(3, 1) # 设置第一行高度
r.add_rows_height(3, '2:4') # 设置二至四行高度
r.add_rows_height(3, [5, 7, 9]) # 设置五、七、九行高度
r.add_rows_height(3, True) # 设置所有行高度
📌 add_cols_width()
此方法用于设置指定列的宽度,可设置多列。
列可用列序号或列序号指定,但不能用表头值。列号不区分大小写。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
width | folat | 必填 | 列宽 |
cols | intstrlisttupleTrue | 必填 | 列号,可指定多列,如1'a''1:4''a:d'[1, 2, 3]['a', 'b', 'c'],为Ture设置所有列 |
table | strTrueNone | None | 数据表名,为None表示用set.table()方法设置的值,为Ture表示活动的表格 |
返回:None
from DrissionRecord import Recorder
r = Recorder('data.xlsx')
r.add_cols_width(3, 1) # 设置第一列宽度
r.add_cols_width(3, '2:4') # 设置二至四列宽度
r.add_cols_width(3, 'E:G') # 设置E至G列宽度
r.add_cols_width(3, [5, 7, 9]) # 设置五、七、九列宽度
r.add_cols_width(3, ['a', 'b', 'c']) # 设置a、b、c列宽度
r.add_cols_width(3, True) # 设置所有列宽度
✅️ 颜色格式
字体、边框、背景涉及到颜色的设置,这里支持以下几种格式:
📌️ 颜色名称
以下几种颜色可以直接用名字设置
'white':白色'black':黑色'red':红色'green':绿色'blue':蓝色'purple':紫色'yellow':黄色'orange':橙色
from DrissionRecord import CellStyle
c = CellStyle()
c.font.set_color('red')
📌 颜色代码
可以用str或tuple传入十六进制、十进制的颜色代码。
from DrissionRecord import CellStyle
s = CellStyle()
s.font.set_color('FFF000') # 十六进制代码
s.font.set_color('255,255,0') # 十进制代码,str格式
s.font.set_color((255, 255, 0)) # 十进制代码,tuple格式
📌 使用 Color 对象
Color对象是 openpyxl 内置对象,除了颜色,还可以设置透明度等。
具体使用方法见 openpyxl 文档。
from DrissionRecord import CellStyle
from openpyxl.styles import Color
color = Color('FFF000') # 创建Color对象
style = CellStyle()
style.font.set_color(color) # 用Color对象设置颜色
✅️ 样式设置详细 api
📌 font 设置
此属性用于设置单元格字体样式。
💡 font.set_name()
此方法用于设置文本使用的字体。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
name | strNone | 必填 | 字体名称,None表示恢复默认 |
返回:None
💡 font.set_charset()
此方法用于设置字体编码,如何设置参考 openpyxl。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
charset | intNone | 必填 | 字体编码,int格式,None表示恢复默认 |
返回:None
💡 font.set_size()
此方法用于设置字体大小。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
size | floatNone | 必填 | 字体大小,None表示恢复默认 |
返回:None
💡 font.set_bold()
此方法用于设置是否加粗。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
on_off | boolNone | 必填 | bool表示开关,None表示恢复默认 |
返回:None
💡 font.set_italic()
此方法用于设置是否斜体。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
on_off | boolNone | 必 填 | bool表示开关,None表示恢复默认 |
返回:None
💡 font.set_strike()
此方法用于设置是否有删除线。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
on_off | boolNone | 必填 | bool表示开关,None表示恢复默认 |
返回:None
💡 font.set_outline()
此方法用于设置 outline。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
on_off | boolNone | 必填 | bool表示开关,None表示恢复默认 |
返回:None
💡 font.set_shadow()
此方法用于设置是否 有阴影。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
on_off | boolNone | 必填 | bool表示开关,None表示恢复默认 |
返回:None
💡 font.set_condense()
此方法用于设置 condense。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
on_off | boolNone | 必填 | bool表示开关,None表示恢复默认 |
返回:None
💡 font.set_extend()
此方法用于设置 extend。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
on_off | boolNone | 必填 | bool表示开关,None表示恢复默 认 |
返回:None
💡 font.set_color()
此方法用于设置字体颜色。格式:'FFFFFF', '255,255,255', (255, 255, 255), Color对象均可,None表示恢复默认。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
color | strtupleColorNone | 必填 | 字体颜色,None表示恢复默认 |
返回:None
💡 font.set_underline()
此方法用于设置下划线类型。可选 'single', 'double', 'singleAccounting', 'doubleAccounting',None表示恢复默认。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
option | strNone | 必填 | 下划线类型,None表示恢复默认 |