欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

如何使用 OpenPyXL 和 Python 为 Excel 单元格添加样式(教程)

最编程 2024-04-30 16:55:42
...

OpenPyXL让你能够以许多不同的方式为你的单元格设置样式。样式化的单元格会让你的电子表格更有活力你的电子表格可以有一些流行元素,这将有助于将它们与其他表格区分开来。然而,不要太过火了!如果每个单元格都有不同的字体和颜色,那就太过火了。如果每个单元格都有不同的字体和颜色,你的电子表格看起来会很乱。

你应该有节制地使用你在这篇文章中学到的技能。你仍然会有漂亮的电子表格,可以与你的同事分享。如果你想了解更多关于OpenPyXL支持哪些样式,你应该查看他们的文档

在这篇文章中,你将了解到以下内容。

  • 与字体打交道
  • 设置对齐方式
  • 添加边框
  • 改变单元格的背景颜色
  • 在单元格中插入图片
  • 为合并的单元格设计样式
  • 使用内置样式
  • 创建一个自定义命名的样式

现在你知道你要学习什么了,是时候开始探索如何使用OpenPyXL处理字体了

使用字体的工作

你使用字体来为你在计算机上的文本设置样式。字体控制着你在屏幕上或打印出来的文本的大小、重量、颜色和风格。有数以千计的字体可以供你的电脑使用。微软在其Office产品中包括许多字体。

当你想用OpenPyXL设置字体时,你需要从openpyxl.styles ,导入Font 类。以下是你如何进行导入的。

from openpyxl.styles import Font

Font 类需要许多参数。根据OpenPyXL的文档,这里是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=11
  • 粗体=False
  • 斜体=False
  • vertAlign=None
  • 下划线='无
  • strik=False
  • color='FF000000′

这些设置允许你设置大部分你需要的东西,使你的文本看起来漂亮。注意,OpenPyXL中的颜色名称使用十六进制值来表示RGB(红、绿、蓝)颜色值。你可以设置文本是否应该是粗体、斜体、下划线或穿透。

为了看看你如何在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中,你将颜色设为绿色。

当你运行这段代码时,你的输出将看起来像这样。

Different Fonts in Excel

尝试改变代码以使用其他字体或颜色。如果你想冒险,你应该尝试让你的文字变粗或变斜。

现在你已经准备好学习文本对齐方式了。

设置对齐方式

你可以在OpenPyXL中通过使用openpyxl.styles.Alignment 来设置对齐方式。你可以用这个类来旋转文本,设置文本包装,并用于缩进。

下面是Alignment 类使用的默认值。

  • horizontal='general' (水平)
  • 垂直='底部
  • text_rotation=0
  • wrap_text=False
  • shrink_to_fit=False
  • indent=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度。

试着运行这段代码,你会看到类似下面的东西。

Aligning Text in Excel

这看起来不错!如果你花时间尝试不同的text_rotation 值,这将是最好的。然后尝试用不同的值改变horizontalvertical 参数。很快,你就能像专家一样对准你的文本了!

现在你已经准备好学习为你的单元格添加边框了!

添加边框

OpenPyXL为你提供了为单元格添加边框的能力。你可以为单元格的四条边分别指定不同的边框样式。

你可以使用以下任何一种边框样式。

  • 'dashDot'
  • '破折号'(dashDotDot
  • 虚线
  • '点'字形
  • '双'字
  • '头发'
  • '中'字
  • 'mediumDashDot'
  • 'mediumDashDotDot'。
  • 'mediumDashed'
  • '斜线DashDot'
  • '厚'的
  • '薄'。

打开你的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")

这段代码将为A1A3单元格添加一个边框。A1的顶部和底部使用的是 "双 "边框样式,并且是绿色的,而单元格的两侧使用的是 "薄 "边框样式,颜色为粉红色。

单元格A3使用相同的边框,但将它们互换,现在边框为绿色,顶部和底部为粉色。

你通过在要使用的border_stylecolor 中创建Side 对象来获得这种效果。然后你把这些Side 对象传递给一个Border 类,这样你就可以单独设置单元格的四个边。要对一个单元格应用Border ,你必须设置该单元格的border 属性。

当你运行这段代码时,你会看到以下结果。

Adding a Border to a Cell

这个图片被放大了很多,所以你可以很容易地看到单元格的边界。如果你尝试用本节开头提到的其他一些边框样式来修改这段代码是最好的,这样你就可以看到你还能做什么。

改变单元格的背景颜色

你可以通过改变单元格的背景颜色来突出一个单元格或一个单元格区域。在大多数情况下,突出一个单元格比改变文本的字体或颜色更吸引人。OpenPyXL给了你一个叫做PatternFill 的类,你可以用它来改变一个单元格的背景颜色。

PatternFill 类接受以下参数(默认值包括在下面)。

  • patternType=None
  • fgColor=Color()
  • bgColor=Color()
  • fill_type=无
  • start_color=无
  • end_color=None

你可以使用几种不同的填充类型。下面是目前支持的填充类型的列表。

  • '无
  • '纯色'。
  • 'darkDown'
  • 'darkGray'
  • 'darkGrid'
  • 'darkHorizontal'
  • 'darkTrellis'
  • 'darkUp'
  • 'darkVertical'
  • 'gray0625'
  • 'gray125'
  • 'lightDown'
  • 'lightGray'
  • 'lightGrid'
  • 'lightHorizontal'
  • 'lightTrellis'
  • 'lightUp'
  • 'lightVertical'
  • 'mediumGray'

现在你有足够的信息来尝试使用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文档,看起来像这样。

Alternating Row Color

这里有一些想法,你可以用这段代码试试。

  • 改变受影响的行或列的数量
  • 改变你要改变的颜色
  • 更新代码,用不同的颜色给偶数行着色
  • 尝试其他的填充类型

一旦你完成了背景颜色的实验,你就可以学习在单元格中插入图片的方法了!

在单元格中插入图片

OpenPyXL使在你的Excel电子表格中插入图片变得简单明了。为了实现这个魔法,你可以使用Worksheet 对象的add_image() 方法。这个方法需要两个参数。

  • img - 你要插入的图像文件的路径
  • anchor - 提供一个单元格作为图片的左上角锚点(可选)。

在这个例子中,你将使用Mouse vs. Python的标志。

Mouse vs Python Logo

本书的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电子表格。

如果你打开你的电子表格,你会看到它看起来像这样。

Inserting an Image in an Excel Cell

你可能不会经常需要在Excel电子表格中插入图片,但这是一个很好的技能。

合并单元格的样式

合并单元格是指将两个或多个相邻的单元格合并为一个的单元格。如果你想用OpenPyXL设置一个合并单元格的值,你必须使用合并单元格的最左上角的单元格。

你还必须使用这个特定的单元格来设置整个合并单元格的样式。你可以在合并的单元格中使用你在单个单元格上使用的所有样式和字体设置。然而,你必须将样式应用于左上角的单元格,这样才能应用于整个合并的单元格。

如果你看到一些代码,你就会明白这是如何工作的。来吧,创建一个名为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。然后你设置单元格的值、边框、填充、字体和对齐方式。

当你运行这段代码时,你的新电子表格将看起来像这样。

Styling a Merged Cell

看起来不错吧?你应该花些时间,在合并的单元格上尝试一些不同的风格。例如,也许可以想出一个比这里使用的灰色更好的渐变。

现在你已经准备好学习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"。

当你运行这段代码时,你最终会有一个看起来像这样的电子表格。

Using  Built-in Styles

一如既往,你应该尝试其他一些内置的样式。试用它们是确定它们的作用以及它们是否适合你的唯一方法。

但是,等等!如果你想创建自己的风格呢?这就是你在下一节要讲的内容

创建一个自定义命名的风格

你也可以使用OpenPyXL创建你设计的自定义样式。要创建你的样式,你必须使用NamedStyle 类。

NamedStyle 类需要以下参数(默认值也包括在内)。

  • name="Normal"
  • font=Font()
  • fill=PatternFill()
  • border=边框()
  • align=对齐方式()
  • number_format=无
  • protection=保护()
  • builtinId=无
  • hidden=False
  • xfId=None

你应该始终为你的NamedStyle 提供你自己的name ,以保持它的唯一性。继续创建一个新的文件并将其称为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() 。一旦你创建了你的自定义样式,你可以通过设置单元格的style 属性将其应用于单元格。应用自定义样式的方式与应用内置样式的方式相同!

你将自定义样式应用到A1单元格。

当你运行这段代码时,你会得到一个看起来像这样的电子表格。

Using a Custom Named Style

现在轮到你了!编辑代码,使用Side 样式,这将改变你的边界。或者创建多个Side 实例,这样你就可以让单元格的每一面都变得独一无二。玩玩不同的字体,或者添加一个自定义的背景颜色!

总结

你可以使用OpenPyXL对单元格做很多不同的事情。本文中的信息使你有能力以漂亮的方式格式化你的数据。

在这篇文章中,你了解到了以下主题。

  • 使用字体
  • 设置对齐方式
  • 添加边框
  • 改变单元格的背景颜色
  • 在单元格中插入图像
  • 为合并的单元格设计样式
  • 使用内置样式
  • 创建一个自定义命名的样式

你可以利用你在本文中学到的信息来制作漂亮的电子表格。你可以通过改变单元格的背景颜色或字体来突出令人兴奋的数据。你还可以通过使用内置样式来改变单元格的格式。来吧,试一试。

实验一下本文中的代码,看看OpenPyXL在处理单元格时是多么强大和有价值。

相关阅读

  • 用OpenPyXL和Python阅读电子表格
  • 用OpenPyXL和Python创建电子表格
  • 用Python实现Excel的自动化(书)

The postStyling Excel Cells with OpenPyXL and Pythonappeared first onMouse Vs Python.