Python 修改 Excel 单元格格式

926 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第30天,点击查看活动详情

前言

在电子表格中呈现信息不仅仅意味着将数据组织成单元格以展示数据信息,我们还可以通过修改单元格样式来突出显示重要数据信息细节。在本节中,我们将学习如何操纵单元格的格式以增强显示效果并以最佳方式呈现数据。

Python 修改 Excel 单元格格式

安装 openpyxl 库

为了修改 Excel 文件中单元格样式,我们需要使用 openpyxl 模块,首先需要安装该模块,其安装方法与其它第三方库的安装完全相同:

$ pip install openpyxl

修改 Excel 单元格格式

首先,导入 openpyxl 模块并创建一个新的 Excel 文件:

>>> import openpyxl
>>> from openpyxl.styles import Font, PatternFill, Border, Side
>>> xlsfile = openpyxl.Workbook()

创建用户影评数据,用于之后写入 Excel 文件,为了简单起见,这里只定义四行数据:

>>> data = [(‘User name’, ‘Movie name’, ‘rating’), ('001', 'Star Wars', 7.8), ('002', 'Back to Future', 8.0), ('002', 'Batman', 7.7), ('003', 'Spy 007', 8.3)]

在导入 openpyxl 模块后,使用 Workbook 类创建一个新的 Excel 文件,然后,我们将数据添加到 Excel 中的第一个工作表中。

>>> sheet = xlsfile['Sheet']
>>> for row in data:
...     sheet.append(row)
...

定义用于样式化电子表格的颜色:

>>> white = 'FFFFFF'
>>> blue = '0033CC'
>>> light_blue = 'E6ECFF'

定义要使用的颜色为之后单元格样式的修改做好准备。颜色以十六进制格式定义,这种定义方式在网页设计中非常常见。为了能够确定所需颜色的色值,我们可以使用类似颜色选择器或调色板之类的工具。

使用蓝色背景和白色字体定义标头:

>>> header_font = Font(name='Tahoma', size=14, color=white)
>>> header_fill = PatternFill("solid", fgColor=blue)
>>> for row in sheet['A1:C1']:
...     for cell in row:
...             cell.font = header_font
...             cell.fill = header_fill
...

我们将定义好的格式应用于标头,在本节中我们的标头使用不同的字体 (Tahoma),更大的字号 (14pt),并且使用蓝色的背景和白色的字体颜色。因此,我们需要使用一个带有字体、大小和前景色进行实例化的 Font 对象,以及一个带有背景色的 PatternFill 对象。创建 header_fontheader_fill 后需要使用循环将字体和填充应用到相应的单元格。需要注意的是,迭代时首先需要定义行范围,然后是单元格,即使我们仅仅需要一行。

为标头后的每一行定义列的样式和边框:

>>> white_side = Side(border_style='thin', color=white)
>>> blue_side = Side(border_style='thin', color=blue)
>>> alternate_fill = PatternFill("solid", fgColor=light_blue)
>>> border = Border(bottom=blue_side, left=white_side, right=white_side)
>>> for row_index, row in enumerate(sheet['A2:C5']):
...     for cell in row:
...             cell.border = border
...             if row_index % 2:
...                     cell.fill = alternate_fill
...

为标头后的数据行使用不同背景颜色并定义边框。边框的顶部和底部是蓝色的,左侧和右侧是白色的。单元格填充的方式与标头类似,不同的仅仅是颜色值,并且我们仅仅为偶数行应用背景色。需要注意的是,单元格的上边框是上一行单元格的下边框,反之亦然,这意味着在循环中边框的样式会被覆盖。

将文件另存为 movies_rating_format.xlsx

>>> xlsfile.save('movies_rating_format.xlsx')

检查生成的文件,使用 WPS 打开创建完成的电子表格文件,可以看到单元格的样式被正确设定:

movies_rating_format.xlsx