跳到主要内容

📒 单元格样式

本节介绍 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(代表新行)。

参数名称类型默认值说明
stylesCellStyle
list
tuple
dict
必填传入CellStyle对象设置整个新行,传入CellStyle对象组成的列表设置多个,传入None清空设置
coordint
str
tuple
list
必填单元格坐标,输入数字代表行,传入字母代表列号,传入tuple为单元格坐标,传入'A1:C5''a:d''1:5'格式可设置指定范围
replaceboolTrue是否直接覆盖所有已有样式,如为False只替换设置的属性
tablestr
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()

✅️ 跟随上一行的样式

使用set.follow_styles()可设置新填入的数据自动设置为上一行的样式。

说明

如果是插入新行,会复制上一行整行样式,即使有些单元格没有数据。
如果是指定位置填入数据,则只会复制数据所在列上一个单元格的样式。

from DrissionRecord import Recorder

r = Recorder('data.xlsx')
r.set.follow_styles()

✅️ 设置新行默认样式

📌 set.new_row_styles()

此方法用于设置新行样式,只有xlsx格式有效,可传入多个样式,传入None则取消。

传入多个样式对象时,只会对指定位置单元格进行设置,不会铺满整列。

传入dict格式时,可对指定列设置特定样式。键是int时表示列序号,键是str时表示表头值。

参数名称类型默认值说明
stylesCellStyle
list
tuple
dict
必填传入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()

此方法用于设置新行行高。

参数名称类型默认值说明
heightfloat
None
必填行高,传入None清空设置
返回类型说明
RecorderSetter设置对象
from DrissionRecord import Recorder

r = Recorder('data.xlsx')
r.set.new_row_height(30)

设置超链接默认样式方法用于设置添加到文档的超链接默认样式。

参数名称类型默认值说明
styleCellStyle
True
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()

此方法用于设置指定行的高度,可设置多行。

参数名称类型默认值说明
heightfloat必填行高
rowsint
str
list
tuple
True
必填行号,可指定多行,如1'1:4'[1, 2, 3],为Ture设置所有行
tablestr
True
None
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()

此方法用于设置指定列的宽度,可设置多列。

列可用列序号或列序号指定,但不能用表头值。列号不区分大小写。

参数名称类型默认值说明
widthfolat必填列宽
colsint
str
list
tuple
True
必填列号,可指定多列,如1
'a'
'1:4'
'a:d'
[1, 2, 3]
['a', 'b', 'c'],为Ture设置所有列
tablestr
True
None
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')

📌 颜色代码

可以用strtuple传入十六进制、十进制的颜色代码。

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()

此方法用于设置文本使用的字体。

参数名称类型默认值说明
namestr
None
必填字体名称,None表示恢复默认

返回:None


💡 font.set_charset()

此方法用于设置字体编码,如何设置参考 openpyxl。

参数名称类型默认值说明
charsetint
None
必填字体编码,int格式,None表示恢复默认

返回:None


💡 font.set_size()

此方法用于设置字体大小。

参数名称类型默认值说明
sizefloat
None
必填字体大小,None表示恢复默认

返回:None


💡 font.set_bold()

此方法用于设置是否加粗。

参数名称类型默认值说明
on_offbool
None
必填bool表示开关,None表示恢复默认

返回:None


💡 font.set_italic()

此方法用于设置是否斜体。

参数名称类型默认值说明
on_offbool
None
必填bool表示开关,None表示恢复默认

返回:None


💡 font.set_strike()

此方法用于设置是否有删除线。

参数名称类型默认值说明
on_offbool
None
必填bool表示开关,None表示恢复默认

返回:None


💡 font.set_outline()

此方法用于设置 outline。

参数名称类型默认值说明
on_offbool
None
必填bool表示开关,None表示恢复默认

返回:None


💡 font.set_shadow()

此方法用于设置是否有阴影。

参数名称类型默认值说明
on_offbool
None
必填bool表示开关,None表示恢复默认

返回:None


💡 font.set_condense()

此方法用于设置 condense。

参数名称类型默认值说明
on_offbool
None
必填bool表示开关,None表示恢复默认

返回:None


💡 font.set_extend()

此方法用于设置 extend。

参数名称类型默认值说明
on_offbool
None
必填bool表示开关,None表示恢复默认

返回:None


💡 font.set_color()

此方法用于设置字体颜色。格式:'FFFFFF', '255,255,255', (255, 255, 255), Color对象均可,None表示恢复默认。

参数名称类型默认值说明
colorstr
tuple
Color
None
必填字体颜色,None表示恢复默认

返回:None


💡 font.set_underline()

此方法用于设置下划线类型。可选 'single', 'double', 'singleAccounting', 'doubleAccounting'None表示恢复默认。

参数名称类型默认值说明
optionstr
None
必填下划线类型,None表示恢复默认

返回:None


💡 font.set_vertAlign()

此方法用于设置字体上下标类型。

可选:'superscript', 'subscript', 'baseline'None表示恢复默认。

参数名称类型默认值说明
optionstr
None
必填上下标类型,None表示恢复默认

返回:None


💡 font.set_scheme()

此方法用于设置 scheme 类型。

可选:'major', 'minor'None表示恢复默认。

参数名称类型默认值说明
optionstr
None
必填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 属性。

参数名称类型默认值说明
stylestr
None
必填在类型种选择,None表示恢复默认
colorstr
tuple
Color
None
必填颜色,None表示恢复默认

返回:None


💡 border.set_end()

此方法用于设置 end 属性。

参数名称类型默认值说明
stylestr
None
必填在类型种选择,None表示恢复默认
colorstr
tuple
Color
None
必填颜色,None表示恢复默认

返回:None


💡 border.set_left()

此方法用于设置左边框。

参数名称类型默认值说明
stylestr
None
必填在类型种选择,None表示恢复默认
colorstr
tuple
Color
None
必填颜色,None表示恢复默认

返回:None


💡 border.set_right()

此方法用于设置有边框。

参数名称类型默认值说明
stylestr
None
必填在类型种选择,None表示恢复默认
colorstr
tuple
Color
None
必填颜色,None表示恢复默认

返回:None


💡 border.set_top()

此方法用于设置上边框。

参数名称类型默认值说明
stylestr
None
必填在类型种选择,None表示恢复默认
colorstr
tuple
Color
None
必填颜色,None表示恢复默认

返回:None


💡 border.set_bottom()

此方法用于设置下边框。

参数名称类型默认值说明
stylestr
None
必填在类型种选择,None表示恢复默认
colorstr
tuple
Color
None
必填颜色,None表示恢复默认

返回:None


💡 border.set_diagonal()

此方法用于设置对角线。

参数名称类型默认值说明
stylestr
None
必填在类型种选择,None表示恢复默认
colorstr
tuple
Color
None
必填颜色,None表示恢复默认

返回:None


💡 border.set_vertical()

此方法用于设置垂直中线。

参数名称类型默认值说明
stylestr
None
必填在类型种选择,None表示恢复默认
colorstr
tuple
Color
None
必填颜色,None表示恢复默认

返回:None


💡 border.set_horizontal()

此方法用于设置水平中线。

参数名称类型默认值说明
stylestr
None
必填在类型种选择,None表示恢复默认
colorstr
tuple
Color
None
必填颜色,None表示恢复默认

返回:None


💡 border.set_outline()

此方法用于设置 outline 属性。

参数名称类型默认值说明
on_offbool必填bool表示开关

返回:None


💡 border.set_diagonalDown()

此方法用于设置 diagonalDown 属性。

参数名称类型默认值说明
on_offbool必填bool表示开关

返回:None


💡 border.set_diagonalUp()

此方法用于设置 diagonalUp 属性。

参数名称类型默认值说明
on_offbool必填bool表示开关

返回:None


📌 alignment 设置

此属性用于设置单元格对齐方式。

💡 alignment.set_horizontal()

此方法用于设置水平位置。

可选:'general', 'left', 'center', 'right', 'fill', 'justify', 'centerContinuous', 'distributed'None表示恢复默认。

参数名称类型默认值说明
horizontalstr
None
必填在选项中选择,None表示恢复默认

返回:None


💡 alignment.set_vertical()

此方法用于设置垂直位置。

可选:'top', 'center', 'bottom', 'justify', 'distributed'None表示恢复默认。

参数名称类型默认值说明
verticalstr
None
必填在选项中选择,None表示恢复默认。

返回:None


💡 alignment.set_indent()

此方法用于设置缩进。

参数名称类型默认值说明
indentint必填缩进数值,0255

返回:None


💡 alignment.set_relativeIndent()

此方法用于设置相对缩进。

参数名称类型默认值说明
indentint必填缩进数值,-255255

返回:None


💡 alignment.set_justifyLastLine()

此方法用于设置 justifyLastLine。

参数名称类型默认值说明
on_offbool
None
必填bool表示开关,None恢复默认

返回:None


💡 alignment.set_readingOrder()

此方法用于设置 readingOrder。

参数名称类型默认值说明
valueint必填不小于0的数字

返回:None


💡 alignment.set_textRotation()

此方法用于设置文本旋转角度。

参数名称类型默认值说明
valueint必填可输入0180

返回:None


💡 alignment.set_wrapText()

此方法用于设置是否自动换行。

参数名称类型默认值说明
on_offbool
None
必填bool表示开关,None恢复默认

返回:None


💡 alignment.set_shrinkToFit()

此方法用于设置 shrinkToFit。

参数名称类型默认值说明
on_offbool
None
必填bool表示开关,None恢复默认

返回:None


📌 pattern_fill 设置

此属性用于设置图案填充方式。

gradient_fill互斥,会清除已有gradient_fill设置。

💡 pattern_fill.set_patternType()

此方法用于设置填充类型。

可选:'none', 'solid', 'darkDown', 'darkGray', 'darkGrid', 'darkHorizontal', 'darkTrellis', 'darkUp', 'darkVertical', 'gray0625', 'gray125', 'lightDown', 'lightGray', 'lightGrid', 'lightHorizontal', 'lightTrellis', 'lightUp', 'lightVertical', 'mediumGray'None为恢复默认

参数名称类型默认值说明
namestr必填bool表示开关,None恢复默认

返回:None


💡 pattern_fill.set_fgColor()

此方法用于设置前景色。

格式:'FFFFFF', '255,255,255', (255, 255, 255), Color对象均可,None表示恢复默认。

参数名称类型默认值说明
colorstr
tuple
Color
必填颜色

返回:None


💡 pattern_fill.set_bgColor()

此方法用于设置背景色。

格式:'FFFFFF', '255,255,255', (255, 255, 255), Color对象均可,None表示恢复默认。

参数名称类型默认值说明
colorstr
tuple
Color
必填颜色

返回:None


📌 gradient_fill 设置

此属性用于设置渐变填充方式。

pattern_fill互斥,会清除已有pattern_fill设置。

💡 gradient_fill.set_type()

此方法用于设置填充类型。

可选:'linear', 'path'

参数名称类型默认值说明
namestr必填类型名称

返回:None


💡 gradient_fill.set_degree()

此方法用于设置程度。

参数名称类型默认值说明
valuefloat必填degree 数值

返回:None


💡 gradient_fill.set_left()

此方法用于设置左向数值。

参数名称类型默认值说明
valuefloat必填left 数值

返回:None


💡 gradient_fill.set_right()

此方法用于设置右向数值。

参数名称类型默认值说明
valuefloat必填right 数值

返回:None


💡 gradient_fill.set_top()

此方法用于设置上向数值。

参数名称类型默认值说明
valuefloat必填top 数值

返回:None


💡 gradient_fill.set_bottom()

此方法用于设置下向数值。

参数名称类型默认值说明
valuefloat必填bottom 数值

返回:None


💡 gradient_fill.set_stop()

此方法用于设置下向数值。

参数名称类型默认值说明
valueslist
tuple
必填stop 数值

返回:None


📌 number_format 设置

此属性用于设置单元格数字格式。

💡 number_format.set_format()

此方法用于设置数字格式。

数字格式为特定格式的字符串,如'm/d/yy h:mm',具体在openpyxl.numbers查看。

参数名称类型默认值说明
stringstr
None
必填格式字符串,为None时恢复默认

返回:None


📌 protection 设置

此属性用于设置单元格保护设置。

💡 protection.set_hidden()

此方法用于设置单元格是否隐藏。

参数名称类型默认值说明
on_offbool必填bool表示开关

返回:None


💡 protection.set_locked()

此方法用于设置单元格是否锁定。

参数名称类型默认值说明
on_offbool必填bool表示开关

返回:None