用openpyxl.styles设置格式

2020年7月10日 / 6,033次阅读 / Last Modified 2020年7月16日
excel表格

openpyxl的单元格样式由6种属性决定,每一种都是一个类。如下所示(大概意思):

  • font(字体类):字号、字体颜色、下划线等
  • fill(填充类):颜色等
  • border(边框类):设置单元格边框
  • alignment(位置类):对齐方式
  • number_format(格式类):数据格式
  • protection(保护类):写保护
>>> 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)

大概能用的属性如上,具体不同的版本有写差异,可直接到openpyxl官网(https://openpyxl.readthedocs.io/en/stable/index.html)去查看Module Code。

对一个cell进行格式设置:

ws["B5"].font = ft
ws["B5"].fill =fill
ws["B5"].border = bd
ws["B5"].alignment = alignment
ws["B5"].number_format = number_format
ws["B5"].value ="pynote.net"

多某行或某列进行格式设置:

>>> ws.column_dimensions['A']
<openpyxl.worksheet.dimensions.ColumnDimension object at 0x000000000A6465E8>
>>> ws.row_dimensions[1]
>>> a = ws.row_dimensions[1]
>>> a.font
<openpyxl.styles.fonts.Font object>
Parameters:
name='Calibri', charset=None, family=2.0, b=False, i=False, strike=None, outline
=None, shadow=None, condense=None, color=<openpyxl.styles.colors.Color object>
Parameters:
rgb=None, indexed=None, auto=None, theme=1, tint=0.0, type='theme', extend=None,
 sz=11.0, u=None, vertAlign=None, scheme='minor'
>>> b = ws.column_dimensions['A']
>>> b.font
<openpyxl.styles.fonts.Font object>
Parameters:
name='Calibri', charset=None, family=2.0, b=False, i=False, strike=None, outline
=None, shadow=None, condense=None, color=<openpyxl.styles.colors.Color object>
Parameters:
rgb=None, indexed=None, auto=None, theme=1, tint=0.0, type='theme', extend=None,
 sz=11.0, u=None, vertAlign=None, scheme='minor'

直接对属性进行赋值即可。

可控制属性是在太多了,本人对excel不熟悉,我想如果熟悉excel软件可能会对这些属性感觉更亲切吧。

有一个常见的问题,如何让自动生产的excel表格的宽度能够自适应,我也没有找到直接设置属性的方法。网上有一种方案,遍历列,找到最长的字符串,然后据此设置列的宽。

-- EOF --

本文链接:https://www.pynote.net/archives/2229

留言区

《用openpyxl.styles设置格式》有2条留言

您的电子邮箱地址不会被公开。 必填项已用*标注

  • 麦新杰

    font貌似也只能对cell才有效。 [回复]

  • 麦新杰

    我发现设置居中,只能对cell进行才有效果。 [回复]


前一篇:
后一篇:

More

麦新杰的Python笔记

Ctrl+D 收藏本页


©Copyright 麦新杰 Since 2019 Python笔记

go to top