openpyxl3.0官方文档(25)—— 使用样式

介绍

样式用于控制表格内容在屏幕上显示时的外观。它们还用于确定数字的格式。
样式可以应用于以下方面:

  • 字体设置字体大小、颜色、下划线等。
  • 填充以设置图案或颜色渐变
  • border在单元格上设置边框
  • 单元格对齐
  • 保护

以下是默认值

     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=colors.RED)
     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=colors.RED, 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")

a值理论上指的是颜色的透明度,但这与单元格样式无关。默认值00将附加到RGB值前。

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

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

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

索引颜色
[图片上传失败...(image-c2248d-1594479011533)]索引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
    

命名样式

与单元格样式相反,命名样式是可变的。当你想一次将格式应用到许多不同的单元格时,它们是有意义的。注意如果已将命名样式分配给单元格,对样式的其他更改不会影响单元格样式。
一旦命名样式注册到工作簿中,就可以简单地按名称将其重新命名。

创建命名样式

     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将只识别英文名称,并且只识别以下名称:

  • ‘Normal’ # same as no style

Number formats

  • ‘Comma’
  • ‘Comma [0]’
  • ‘Currency’
  • ‘Currency [0]’
  • ‘Percent’

Informative

  • ‘Calculation’
  • ‘Total’
  • ‘Note’
  • ‘Warning Text’
  • ‘Explanatory Text’

Text styles

  • ‘Title’
  • ‘Headline 1’
  • ‘Headline 2’
  • ‘Headline 3’
  • ‘Headline 4’
  • ‘Hyperlink’
  • ‘Followed Hyperlink’
  • ‘Linked Cell’

Comparisons

  • ‘Input’
  • ‘Output’
  • ‘Check Cell’
  • ‘Good’
  • ‘Bad’
  • ‘Neutral’

Highlights

  • ‘Accent1’
  • ‘20 % - Accent1’
  • ‘40 % - Accent1’
  • ‘60 % - Accent1’
  • ‘Accent2’
  • ‘20 % - Accent2’
  • ‘40 % - Accent2’
  • ‘60 % - Accent2’
  • ‘Accent3’
  • ‘20 % - Accent3’
  • ‘40 % - Accent3’
  • ‘60 % - Accent3’
  • ‘Accent4’
  • ‘20 % - Accent4’
  • ‘40 % - Accent4’
  • ‘60 % - Accent4’
  • ‘Accent5’
  • ‘20 % - Accent5’
  • ‘40 % - Accent5’
  • ‘60 % - Accent5’
  • ‘Accent6’
  • ‘20 % - Accent6’
  • ‘40 % - Accent6’
  • ‘60 % - Accent6’
  • ‘Pandas’

有关内置样式的更多信息,请参阅:mod:openpyxl.styles.builtins

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354