OpenPyXL 还允许您以多种不同的方式设置单元格样式。 风格化的单元格将使您的电子表格看起来很棒! 这将有助于将它们与其他电子表格区分开来。 但不要做得太过分,如果每个单元格都有不同的字体和颜色,你的电子表格看起来会很糟糕。
您应该谨慎使用本文中学到的技能。 如果您想了解有关 OpenPyXL 支持的样式的更多信息,可以查看他们的文档。
在本文中,您将了解:
设置字体设置对齐方式添加边框修改单元格背景颜色将图像插入单元格样式合并单元格使用外部样式创建自定义命名样式
现在是开始探索如何将 OpenPyXL 与字体结合使用的时候了!
设置字体
您可以使用字体来设计计算机上的文本样式。 字体控制您在屏幕或副本中看到的文本的大小、粗细、颜色和样式。 您的计算机有数千种可用字体。 Microsoft 在其 Office 产品中包含许多字体。
当您想使用 OpenPyXL 设置字体时,您需要从 openpyxl.styles 导出 Font 类。 以下是导出的方法:
from openpyxl.styles import Font
Font 类有很多参数。 根据 OpenPyXL 的文档html设置字体样式,以下是 Font 类的完整参数列表:
class openpyxl.styles.fonts.Font(name=None, sz=None, b=None, i=None, charset=None, u=None,
strike=None, color=None, scheme=None, family=None, size=None, bold=None, italic=None,
strikethrough=None, underline=None, vertAlign=None, outline=None, shadow=None,
condense=None, extend=None)
以下列表显示了您最有可能使用的参数及其默认值:
name='Calibri'size=11bold=Falseitalic=FalsevertAlign=Noneunderline='none'strike=Falsecolor='FF000000'
这些参数允许您设置使文本看起来漂亮所需的大部分内容。 请注意,OpenPyXL 中的颜色名称使用十六进制值来表示 RGB(红、绿、蓝)颜色值。 您可以设置文本是否应为 Times New Roman、斜体、下划线或删除线。
要了解如何在 OpenPyXL 中使用字体,请创建一个名为 font_sizes.py 的新文件并向其中添加以下代码:
# font_sizes.py
import openpyxl
from openpyxl.styles import Font
def font_demo(path):
workbook = openpyxl.Workbook()
sheet = workbook.active
cell = sheet["A1"]
cell.font = Font(size=12)
cell.value = "Hello"
cell2 = sheet["A2"]
cell2.font = Font(name="Arial", size=14, color="00FF0000")
sheet["A2"] = "from"
cell2 = sheet["A3"]
cell2.font = Font(name="Tahoma", size=16, color="00339966")
sheet["A3"] = "OpenPyXL"
workbook.save(path)
if __name__ == "__main__":
font_demo("font_demo.xlsx")
此代码在三个不同的单元格中使用三种不同的字体。 在 A1 中,您使用默认值,即 Calibri。 然后在A2中将字体大小设置为Arial并将大小减小到14磅。 最后,在 A3 中,将字体更改为 Tahoma,并将字体大小更改为 16 磅。
对于第二和第三字体,您还可以修改文本颜色。 在A2中,将颜色设置为黄色,在A3中,将颜色设置为红色。
当您运行此代码时,您的输出将如下所示:
尝试修改代码以使用不同的字体或颜色。 如果你想冒险,你应该尝试将你的文字加粗或粗体。
现在您已准备好了解文本对齐。
设置对齐方式
您可以使用 openpyxl.styles.Alignment 在 OpenPyXL 中设置对齐方法。 您可以使用它来旋转文本、设置文本换行和缩进。
以下是Alignment类使用的默认值:
水平='一般'垂直='底部'text_rotation=0wrap_text=Falseshrink_to_fit=Falseindent=0
打开 Python 编辑器并创建一个名为alignment.py 的新文件。 然后在其中添加以下代码:
# alignment.py
from openpyxl import Workbook
from openpyxl.styles import Alignment
def center_text(path, horizontal="center", vertical="center"):
workbook = Workbook()
sheet = workbook.active
sheet["A1"] = "Hello"
sheet["A1"].alignment = Alignment(horizontal=horizontal,
vertical=vertical)
sheet["A2"] = "from"
sheet["A3"] = "OpenPyXL"
sheet["A3"].alignment = Alignment(text_rotation=90)
workbook.save(path)
if __name__ == "__main__":
center_text("alignment.xlsx")
当您运行此代码时,您会将字符串在 A1 中水平和垂直居中。 然后使用A2的默认值。 最后,对于 A3,将文本旋转 90 度。
尝试运行这段代码,你会看到类似这样的内容:
最好花时间尝试不同的 text_rotation 值。 然后尝试用不同的值修改水平和垂直参数。 很快,您就可以像专业人士一样对齐文本了!
现在您已准备好学习如何为单元格添加边框!
添加边框
OpenPyXL 使您能够设置单元格边框的样式。 您可以为单元格的四个边指定不同的边框样式。
您可以使用以下任意边框样式:
'dashDot' 'dashDotDot' '虚线' '点' '双' '头发' '中' 'mediumDashDot' 'mediumDashDotDot', 'mediumDashed' 'slantDashDot' '厚' '薄'
打开 Python 编辑器并创建一个名为 border.py 的新文件。 然后在您的文件中输入以下代码:
# border.py
from openpyxl import Workbook
from openpyxl.styles import Border, Side
def border(path):
pink = "00FF00FF"
green = "00008000"
thin = Side(border_style="thin", color=pink)
double = Side(border_style="double", color=green)
workbook = Workbook()
sheet = workbook.active
sheet["A1"] = "Hello"
sheet["A1"].border = Border(top=double, left=thin, right=thin, bottom=double)
sheet["A2"] = "from"
sheet["A3"] = "OpenPyXL"
sheet["A3"].border = Border(top=thin, left=double, right=double, bottom=thin)
workbook.save(path)
if __name__ == "__main__":
border("border.xlsx")
此代码将为单元格 A1 和 A3 添加边框。 A1 的底部和顶部使用“双”边框样式并且为红色,而单元格的两侧使用“细”边框样式并且为粉色。
单元格 A3 使用相同的边框,但交换了边框,现在侧面为红色,顶部和顶部为粉红色。
您可以通过创建具有 border_style 和要使用的颜色的 Side 对象来获得此效果。 然后,将此 Side 对象传递给 Border 类,该类允许您单独设置单元格的四个边。 要将边框应用于单元格,必须设置单元格的边框属性。
当您运行此代码时,您将看到以下结果:
该图像被大大放大,以便您可以轻松看到细胞的边界。 如果您尝试更改此代码以使用本节开头提到的一些其他边框样式,您可以看到还可以做什么。
更改单元格背景颜色
您可以通过修改背景颜色来突出显示一个单元格或一系列单元格。 在大多数情况下,突出显示单元格比修改文本的字体或颜色更引人注目。 OpenPyXL 为您提供了一个名为 PatternFill 的类,您可以使用它来修改单元格的背景颜色。
PatternFill 类接受以下参数(默认值如下):
patternType=NonefgColor=颜色()bgColor=颜色()fill_type=Nonestart_color=Noneend_color=无
您可以使用许多不同的填充类型。 以下是当前支持的填充类型列表:
'无' '实心' 'darkDown' 'darkGray' 'darkGrid' 'darkHorizontal' 'darkTrellis' 'darkUp' 'darkVertical' 'gray0625' 'gray125' 'lightDown' 'lightGray' 'lightGrid' 'lightHorizontal' 'lightTrellis' 'lightUp ''浅垂直''中灰色'
现在您有足够的信息来尝试使用 OpenPyXL 设置单元格的背景颜色。 在Python编辑器中打开一个新文件并将其命名为background_colors.py。 然后将此代码添加到您的新文件中:
# background_colors.py
from openpyxl import Workbook
from openpyxl.styles import PatternFill
def background_colors(path):
workbook = Workbook()
sheet = workbook.active
yellow = "00FFFF00"
for rows in sheet.iter_rows(min_row=1, max_row=10, min_col=1, max_col=12):
for cell in rows:
if cell.row % 2:
cell.fill = PatternFill(start_color=yellow, end_color=yellow,
fill_type = "solid")
workbook.save(path)
if __name__ == "__main__":
background_colors("bg.xlsx")
此示例迭代 9 行和 12 列。 如果单元格位于主行中,它将每个单元格的背景颜色设置为红色。 背景颜色发生变化的单元格将从 A 列移动到 L 列。
当您想要设置单元格的背景颜色时,可以将单元格的 fill 属性设置为 PatternFill 的实例。 在此示例中,您指定 start_color 和 end_color。 您还将 fill_type 设置为“solid”。 OpenPyXL 还支持使用 GradientFill 作为背景。
尝试运行这段代码。 运行后,你将得到一个新的 Excel 文档,如下所示:
您可以使用此代码尝试以下一些想法:
更改受影响的行数或列数 修改要修改的颜色 更新代码以使用不同颜色对行进行底色 尝试其他填充类型
完成背景颜色的实验后,您可以学习如何将图像插入单元格!
将图像插入单元格
OpenPyXL 使将图像插入 Excel 电子表格变得简单。 要实现这种神奇效果,您可以使用 Worksheet 对象的 add_image() 方法。 该方法接受两个参数:
img – 要插入锚点的图像文件的路径 – 提供一个单元格作为图像的左上角锚点(可选)
在此示例中,您将使用鼠标与 Python 图像:
本书的 GitHub 存储库中提供了图像供您使用。
下载图像后,创建一个新的 Python 文件并将其命名为 insert_image.py。 然后添加以下内容:
# insert_image.py
from openpyxl import Workbook
from openpyxl.drawing.image import Image
def insert_image(path, image_path):
workbook = Workbook()
sheet = workbook.active
img = Image("logo.png")
sheet.add_image(img, "B1")
workbook.save(path)
if __name__ == "__main__":
insert_image("logo.xlsx", "logo.png")
在这里,您传入要插入的图像的路径。 要插入图像,请调用 add_image()。 在此示例中,您进行硬编码以使用单元格 B1 作为锚单元格。 然后保存 Excel 电子表格。
如果您打开电子表格,您会看到它如下所示:
您可能不需要经常将图像插入 Excel 电子表格,但这是一项出色的技能。
样式合并单元格
合并单元格是将两个或多个相邻的单元格合并为一个单元格。 如果要使用 OpenPyXL 设置合并单元格的值,则必须使用合并单元格的最左上角单元格。
您还必须使用此特定单元格来设置整个合并单元格的样式。 您可以使用在具有合并单元格的单个单元格上使用的所有样式和字体设置。 但是,您必须将样式应用到左上角的单元格才能将其应用到整个合并的单元格。
如果您看到一些代码html设置字体样式,您就会明白这是如何工作的。 继续创建一个名为 style_merged_cell.py 的新文件。 现在在您的文件中输入以下代码:
# style_merged_cell.py
from openpyxl import Workbook
from openpyxl.styles import Font, Border, Side, GradientFill, Alignment
def merge_style(path):
workbook = Workbook()
sheet = workbook.active
sheet.merge_cells("A2:G4")
top_left_cell = sheet["A2"]
light_purple = "00CC99FF"
green = "00008000"
thin = Side(border_style="thin", color=light_purple)
double = Side(border_style="double", color=green)
top_left_cell.value = "Hello from PyOpenXL"
top_left_cell.border = Border(top=double, left=thin, right=thin,
bottom=double)
top_left_cell.fill = GradientFill(stop=("000000", "FFFFFF"))
top_left_cell.font = Font(b=True, color="FF0000", size=16)
top_left_cell.alignment = Alignment(horizontal="center",
vertical="center")
workbook.save(path)
if __name__ == "__main__":
merge_style("merged_style.xlsx")
在这里,您创建一个从 A2(左上方单元格)到 G4 的合并单元格。 然后设置单元格的值、边框、填充、字体和对齐方式。
当您运行此代码时,您的新电子表格将如下所示:
您应该花一些时间在合并单元格上尝试不同的样式。 例如,也许您可以想出比此处使用的红色更好的渐变。
现在您已准备好了解 OpenPyXL 的外部风格!
使用外部样式
OpenPyXL 附带了多种您也可以使用的外部组件。 不要复制本书中外部样式的完整列表,而是查看官方文档,因为它将是样式名称的最新来源。
然而,其中一些风格值得注意。 例如,以下是您可以使用的数字格式样式:
'逗号' '逗号 [0]' '货币' '货币 [0]' '百分比'
您还可以应用文本样式。 以下是这种风格的列表:
'标题''标题 1''标题 2''标题 3''标题 4''超链接''关注的超链接''链接的单元格'
OpenPyXL 还有几个其他外部样式组。 您应该检查文档以了解支持的所有不同样式。
现在您已经知道了一些可以使用的外部样式,是时候进行一些编码了! 创建一个新文件并将其命名为builtin_styls.py。 然后输入以下代码:
# builtin_styles.py
from openpyxl import Workbook
def builtin_styles(path):
workbook = Workbook()
sheet = workbook.active
sheet["A1"].value = "Hello"
sheet["A1"].style = "Title"
sheet["A2"].value = "from"
sheet["A2"].style = "Headline 1"
sheet["A3"].value = "OpenPyXL"
sheet["A3"].style = "Headline 2"
workbook.save(path)
if __name__ == "__main__":
builtin_styles("builtin_styles.xlsx")
在这里,您将三种不同的样式应用到三个不同的单元格。 您可以使用“标题”、“标题 1”和“标题 2”。
当您运行此代码时,您最终会得到一个如下所示的电子表格:
与往常一样,您还应该尝试其他一些外部样式。 尝试它们是确定它们的作用以及它们是否适合您的唯一方法。
如果你想创造自己的风格怎么办? 这就是您将在下一节中介绍的内容!
创建自定义命名样式
您还可以使用 OpenPyXL 创建自定义设计风格。 要创建样式,您必须使用 NamedStyle 类。
NamedStyle 类采用以下参数(还包括默认值):
name=“Normal” font=Font() fill=PatternFill() border=Border()alignment=Alignment() number_format=Noneprotection=Protection()builtinId=Nonehidden=FalsexfId=None
您应该始终为您的 NamedStyle 提供您自己的名称,以保持其唯一性。 继续创建一个新文件并将其命名为named_style.py。 然后在其中添加以下代码:
# named_style.py
from openpyxl import Workbook
from openpyxl.styles import Font, Border, Side, NamedStyle
def named_style(path):
workbook = Workbook()
sheet = workbook.active
red = "00FF0000"
font = Font(bold=True, size=22)
thick = Side(style="thick", color=red)
border = Border(left=thick, right=thick, top=thick, bottom=thick)
named_style = NamedStyle(name="highlight", font=font, border=border)
sheet["A1"].value = "Hello"
sheet["A1"].style = named_style
sheet["A2"].value = "from"
sheet["A3"].value = "OpenPyXL"
workbook.save(path)
if __name__ == "__main__":
named_style("named_style.xlsx")
在这里,您创建 Font()、Side() 和 Border() 的实例以传递给 NamedStyle()。 创建自定义样式后,您可以通过设置单元格的样式属性将其应用到单元格。 应用自定义样式与应用外部样式相同!
您将自定义样式应用于单元格 A1。
当您运行此代码时,您将得到一个如下所示的电子表格:
现在轮到你了! 编辑代码以使用侧面样式,这将修改您的边框。 或者创建 Side 的多个实例,以便使单元格的每一侧都独一无二。 使用不同的字体或添加自定义背景颜色!
总结
您可以使用 OpenPyXL 对单元执行许多不同的操作。 本文中的信息还使您能够以优雅的方式格式化数据。
在本文中,您了解了以下主题:
使用字体设置对齐添加边框修改单元格背景颜色将图像插入单元格样式合并单元格使用外部样式创建自定义命名样式
您可以利用在本文中学到的知识创建复杂的电子表格。 您可以通过修改单元格的背景颜色或字体来突出显示特定数据。 您还可以使用外部样式修改单元格的格式。 OpenPyXL 在处理细胞时非常强大且有价值。