使用样式

介绍

样式用于在屏幕上显示时更改数据的外观。它们还用于确定数字的格式。

样式可以应用于以下方面:

  • 字体设置字体大小、颜色、下划线等。

  • 填充以设置图案或颜色渐变

  • 边框在单元格上设置边框

  • 细胞排列

  • 保护

以下是默认值

>>> from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font
>>> font = Font(name='Calibri',
...                 size=11,
...                 bold=False,
...                 italic=False,
...                 vertAlign=None,
...                 underline='none',
...                 strike=False,
...                 color='FF000000')
>>> fill = PatternFill(fill_type=None,
...                 start_color='FFFFFFFF',
...                 end_color='FF000000')
>>> border = Border(left=Side(border_style=None,
...                           color='FF000000'),
...                 right=Side(border_style=None,
...                            color='FF000000'),
...                 top=Side(border_style=None,
...                          color='FF000000'),
...                 bottom=Side(border_style=None,
...                             color='FF000000'),
...                 diagonal=Side(border_style=None,
...                               color='FF000000'),
...                 diagonal_direction=0,
...                 outline=Side(border_style=None,
...                              color='FF000000'),
...                 vertical=Side(border_style=None,
...                               color='FF000000'),
...                 horizontal=Side(border_style=None,
...                                color='FF000000')
...                )
>>> alignment=Alignment(horizontal='general',
...                     vertical='bottom',
...                     text_rotation=0,
...                     wrap_text=False,
...                     shrink_to_fit=False,
...                     indent=0)
>>> number_format = 'General'
>>> protection = Protection(locked=True,
...                         hidden=False)
>>>

单元格样式和命名样式

有两种类型的样式:单元样式和命名样式,也称为样式模板。

单元样式

单元样式在对象之间共享,一旦指定了单元样式,就不能对其进行更改。这样可以避免不必要的副作用,例如在只有一个单元格发生更改时更改了许多单元格的样式。

>>> from openpyxl.styles import colors
>>> from openpyxl.styles import Font, Color
>>> from openpyxl import Workbook
>>> wb = Workbook()
>>> ws = wb.active
>>>
>>> a1 = ws['A1']
>>> d4 = ws['D4']
>>> ft = Font(color="FF0000")
>>> a1.font = ft
>>> d4.font = ft
>>>
>>> a1.font.italic = True # is not allowed 
>>>
>>> # If you want to change the color of a Font, you need to reassign it::
>>>
>>> a1.font = Font(color="FF0000", italic=True) # the change only affects A1

复制风格

也可以复制样式

>>> from openpyxl.styles import Font
>>> from copy import copy
>>>
>>> ft1 = Font(name='Arial', size=14)
>>> ft2 = copy(ft1)
>>> ft2.name = "Tahoma"
>>> ft1.name
'Arial'
>>> ft2.name
'Tahoma'
>>> ft2.size # copied from the
14.0

颜色

字体、背景、边框等的颜色可以通过三种方式设置:索引、aRGB或主题。索引颜色是遗留实现,颜色本身取决于工作簿或应用程序默认提供的索引。主题颜色对于颜色的互补色调很有用,但也取决于工作簿中的主题。因此,建议使用aRGB颜色。

aRGB颜色

RGB颜色使用十六进制值设置为红色、绿色和蓝色。

>>> from openpyxl.styles import Font
>>> font = Font(color="FF0000")

alpha值理论上指的是颜色的透明度,但这与单元格样式无关。默认值00将添加到任何简单的RGB值:

>>> from openpyxl.styles import Font
>>> font = Font(color="00FF00")
>>> font.color.rgb
'0000FF00'

它还支持传统索引颜色以及主题和色调。

>>> from openpyxl.styles.colors import Color
>>> c = Color(indexed=32)
>>> c = Color(theme=6, tint=0.5)

索引颜色

Standard Colours
Index
0-4 00000000 00FFFFFF 00FF0000 0000FF00 000000FF
5-9 00FFFF00 00FF00FF 0000FFFF 00000000 00FFFFFF
10-14 00FF0000 0000FF00 000000FF 00FFFF00 00FF00FF
15-19 0000FFFF 00800000 00008000 00000080 00808000
20-24 00800080 00008080 00C0C0C0 00808080 009999FF
25-29 00993366 00FFFFCC 00CCFFFF 00660066 00FF8080
30-34 000066CC 00CCCCFF 00000080 00FF00FF 00FFFF00
35-39 0000FFFF 00800080 00800000 00008080 000000FF
40-44 0000CCFF 00CCFFFF 00CCFFCC 00FFFF99 0099CCFF
45-49 00FF99CC 00CC99FF 00FFCC99 003366FF 0033CCCC
50-54 0099CC00 00FFCC00 00FF9900 00FF6600 00666699
55-60 00969696 00003366 00339966 00003300 00333300
60-63 00993300 00993366 00333399 00333333

索引64和65不能设置,分别为系统前景和背景色保留。

应用风格

样式直接应用于单元格

>>> from openpyxl.workbook import Workbook
>>> from openpyxl.styles import Font, Fill
>>> wb = Workbook()
>>> ws = wb.active
>>> c = ws['A1']
>>> c.font = Font(size=12)

样式也可以应用于列和行,但请注意,这仅适用于关闭文件后创建的单元格(在Excel中)。如果要将样式应用于整个行和列,则必须自己将样式应用于每个单元格。这是对文件格式的限制:

>>> col = ws.column_dimensions['A']
>>> col.font = Font(bold=True)
>>> row = ws.row_dimensions[1]
>>> row.font = Font(underline="single")

设置合并单元格的样式

合并单元的行为类似于其他单元对象。其值和格式在其左上角单元格中定义。若要更改整个合并单元格的边框,请更改其左上角单元格的边框。格式是为了写作而生成的。

>>> from openpyxl.styles import Border, Side, PatternFill, Font, GradientFill, Alignment
>>> from openpyxl import Workbook
>>>
>>> wb = Workbook()
>>> ws = wb.active
>>> ws.merge_cells('B2:F4')
>>>
>>> top_left_cell = ws['B2']
>>> top_left_cell.value = "My Cell"
>>>
>>> thin = Side(border_style="thin", color="000000")
>>> double = Side(border_style="double", color="ff0000")
>>>
>>> top_left_cell.border = Border(top=double, left=thin, right=thin, bottom=double)
>>> top_left_cell.fill = PatternFill("solid", fgColor="DDDDDD")
>>> top_left_cell.fill = fill = GradientFill(stop=("000000", "FFFFFF"))
>>> top_left_cell.font  = Font(b=True, color="FF0000")
>>> top_left_cell.alignment = Alignment(horizontal="center", vertical="center")
>>>
>>> wb.save("styled.xlsx")

编辑页面设置

>>> from openpyxl.workbook import Workbook
>>>
>>> wb = Workbook()
>>> ws = wb.active
>>>
>>> ws.page_setup.orientation = ws.ORIENTATION_LANDSCAPE
>>> ws.page_setup.paperSize = ws.PAPERSIZE_TABLOID
>>> ws.page_setup.fitToHeight = 0
>>> ws.page_setup.fitToWidth = 1

命名样式

与单元格样式不同,命名样式是可变的。当您希望同时对许多不同的单元格应用格式时,它们是有意义的。铌。将命名样式分配给单元格后,对样式的其他更改将 not 影响细胞。

一旦在工作簿中注册了命名样式,就可以简单地通过名称引用它。

创建命名样式

>>> from openpyxl.styles import NamedStyle, Font, Border, Side
>>> highlight = NamedStyle(name="highlight")
>>> highlight.font = Font(bold=True, size=20)
>>> bd = Side(style='thick', color="000000")
>>> highlight.border = Border(left=bd, top=bd, right=bd, bottom=bd)

创建命名样式后,可以在工作簿中注册该样式:

>>> wb.add_named_style(highlight)

但命名样式也将在第一次分配给单元格时自动注册:

>>> ws['A1'].style = highlight

注册后,仅使用名称指定样式:

>>> ws['D5'].style = 'highlight'

使用内置样式

该规范包括一些内置样式,也可以使用。不幸的是,这些样式的名称存储在它们的本地化表单中。OpenPYXL只能识别英文名称,并且只能完全按照此处所写的方式识别。如下:

  • '普通'与无样式相同

数字格式

  • 逗号

  • 逗号 [0] ’

  • “货币”

  • “货币” [0] ’

  • “百分比”

翔实的

  • “计算”

  • “合计”

  • “音符”

  • “警告文本”

  • '解释文本'

文本样式

  • “标题”

  • 标题1

  • 标题2

  • 标题3

  • 标题4

  • “超链接”

  • '跟踪的超链接'

  • “链接细胞”

比较

  • “输入”

  • “输出”

  • “检查单元格”

  • “好”

  • “坏”

  • “中立”

集锦

  • “强调1”

  • '20%-强调文字颜色1'

  • '40%-强调文字颜色1'

  • '60%-强调文字颜色1'

  • “强调2”

  • '20%-强调文字颜色2'

  • '40%-强调文字颜色2'

  • '60%-强调文字颜色2'

  • “强调3”

  • '20%-强调文字颜色3'

  • '40%-强调文字颜色3'

  • '60%-强调文字颜色3'

  • “重音4”

  • '20%-强调文字颜色4'

  • '40%-强调文字颜色4'

  • '60%-强调文字颜色4'

  • “强调5”

  • '20%-强调文字颜色5'

  • '40%-强调文字颜色5'

  • '60%-强调文字颜色5'

  • “强调6”

  • '20%-强调文字颜色6'

  • '40%-强调文字颜色6'

  • '60%-强调文字颜色6'

  • 熊猫

有关内置样式的详细信息,请参阅 openpyxl.styles.builtins