📒 单元格样式
本节介绍 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()
此方法用于为单元格设置样式,可批量设置指定范围内的单元格。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
styles | CellStylelisttupledict | 必填 | CellStyle对象,可用列表传入多个;为None则清除单元格样式;可用dict设置指定多个单元格样式,此时coord、rows、cols参数无效 |
coord | intstrtuplelist | None | 单元格坐标,str表示单个单元格'A1'或连续单元格'A1:C5',tuple为单个单元格坐标 |
rows | intstrtuplelist | None | 整行设置,int表示行号,str为'1:3'格式,可用列表传入多行 |
cols | intstrtuplelist | None | 整列设置,int表示列序号,str表示表头值,长度为2的tuple表示连续多列,可用列表传入多行 |
replace | bool | True | 是否直接覆盖所有已有样式,如为False只替换设置的属性 |
table | strTrueNone | None | 数据表名。为None表示用set.table()方法设置的值,为Ture表示活动的表格 |
返回类型:None
可设置范围:
- 单个单元格:
coord传入单元格坐标,格式'A1'、(1, 1)、(1, 'A')均可 - 指定范围:
coord传入'A1:B3'格式字符串,指定一个矩形范围 - 指定离散多个单元格:
coord用dict指定多个单元格,如{'A1': c1, 'B3:D4': c2} - 整行:
rows传入行号,int格式,如1 - 连续多行:
rows传入':'分隔的起止行号,如'1:10' - 离散多行:
rows用tuple或list传入多个行号,如[1, 3, 4] - 整列:
cols用str传入表头名(如'姓名'),或用int传入列号,如1或Col('A') - 连续多列:
cols用长度为2的tuple指定起止列,如(1, 5)或('姓名', '班别') - 离散多列:
cols用list传入多列,如[1, 5, 6]或['姓名', '班别']
说明:
- 以上范围均可用
styles接收多个样式对象,会对指定范围进行平铺。 - 以上坐标数字支持设置为负值(代表从后往前数)或
0(代表新行)。 coord、rows和cols参数是与 关系。- 行号或列序号都是从
1开始。
from DrissionRecord import Recorder, CellStyle
s = CellStyle().set_bgColor('red')
r = Recorder('data.xlsx')
r.add_styles(s, 'a1') # 设置A1单元格样式
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 | floatdict | 必填 | 行高,为dict({1:30, 3:50})时可为每行指定行高,此时rows参数无效 |
rows | intstrlisttupleTrue | True | 行号,可指定多行,如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 | folatdict | 必填 | 列宽,为dict({1:30, '表头值':50})时可为每列指定行高,此时cols参数无效 |
cols | intstrlisttupleTrue | True | 用int表示列序号,str表示表头值,用Col('A')输入列号,用tuple设置连续起止列,用list指定离散列,为Ture设置所有列 |
table | strTrueNone | None | 数据表名,为None表示用set.table()方法设置的值,为Ture表示活动的表格 |
返回:None
from DrissionRecord import Recorder, Col
r = Recorder('data.xlsx')
r.add_cols_width(3, 1) # 设置第一列宽度
r.add_cols_width(3, '姓名') # 设置表头为“姓名”的列的宽度
r.add_cols_width(3, (2, 4)) # 设置二至四列宽度
r.add_cols_width(3, (Col('E'), Col('G'))) # 设置E至G列宽度
r.add_cols_width(3, [5, 7, Col('J')]) # 根据列序号或列号设置列宽
r.add_cols_width(3, ['姓名', '性别', '年龄']) # 根据表头设置列宽
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表示恢复默认 |
返回 :None
💡 font.set_vertAlign()
此方法用于设置字体上下标类型。
可选:'superscript', 'subscript', 'baseline',None表示恢复默认。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
option | strNone | 必填 | 上下标类型,None表示恢复默认 |
返回:None
💡 font.set_scheme()
此方法用于设置 scheme 类型。
可选:'major', 'minor',None表示恢复默认。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
option | strNone | 必填 | scheme 类型,None表示恢复默认 |
返回:None
📌 border 设置
此项用于设置单元格边框线形和颜色。
线形可选:'dashDot', 'dashDotDot', 'dashed', 'dotted', 'double', 'hair', 'medium', 'mediumDashDot', 'mediumDashDotDot', 'mediumDashed', 'slantDashDot', 'thick', 'thin',None表示恢复默认。
颜色格式:'FFFFFF', '255,255,255', (255, 255, 255), Color对象均可,None表示恢复默认。
💡 border.set_start()
此方法用于设置 start 属性。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
style | strNone | 必填 | 在类型种选择,None表示恢复默认 |
color | strtupleColorNone | 必填 | 颜色,None表示恢复默认 |
返回:None
💡 border.set_end()
此方法用于设置 end 属性。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
style | strNone | 必填 | 在类型种选择,None表示恢复默认 |
color | strtupleColorNone | 必填 | 颜色,None表示恢复默认 |
返回:None
💡 border.set_left()
此方法用于设置左边框。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
style | strNone | 必填 | 在类型种选择,None表示恢复默认 |
color | strtupleColorNone | 必填 | 颜色,None表示恢复默认 |
返回:None
💡 border.set_right()
此方法用于设置有边框。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
style | strNone | 必填 | 在类型种选择,None表示恢复默认 |
color | strtupleColorNone | 必填 | 颜色,None表示恢复默认 |
返回:None
💡 border.set_top()
此方法用于设置上边框。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
style | strNone | 必填 | 在类型种选择,None表示恢复默认 |
color | strtupleColorNone | 必填 | 颜色,None表示恢复默认 |