来源:Python中文社区

OpenPyXL 使您能够以多种不同的方式设置单元格的样式。样式化单元格会让您的电子表格充满魅力!这将有助于将它们与其他电子表格区分开来。但是请不要过度使用, 如果每个单元格都有不同的字体和颜色,您的电子表格就会看起来一团糟。

您应该谨慎使用在本文中学到的技能。如果您想了解有关 OpenPyXL 支持样式的更多信息,您可以查看他们的文档。

https://openpyxl.readthedocs.io/en/stable/styles.html

在本文中,您将了解以下内容:

•设置字体•设置对齐方式•添加边框•更改单元格背景颜色•将图像插入单元格•样式合并单元格•使用内置样式•创建自定义命名样式

现在是时候开始探索如何使用 OpenPyXL 处理字体了!

设置字体

您可以用字体在计算机上设置文本样式。字体控制您在屏幕上或打印中看到的文本的大小、粗细、颜色和样式。您的计算机可以使用数千种字体。Microsoft 在其 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=11bold=Falseitalic=FalsevertAlign=Noneunderline=’none’strike=Falsecolor=’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.activecell = 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类使用的默认值:

horizontal=’general’vertical=’bottom’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.activesheet["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’‘dashed’‘dotted’‘double’‘hair’‘medium’‘mediumDashDot’‘mediumDashDotDot’,‘mediumDashed’‘slantDashDot’‘thick’‘thin’

打开 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.activesheet["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=Color()bgColor=Color()fill_type=Nonestart_color=Noneend_color=None

您可以使用多种不同的填充类型。以下是当前支持的填充类型列表:

‘none’‘solid’‘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.activeyellow = "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 列。

当您想设置单元格的背景颜色时,您可以将单元格的填充属性设置为 PatternFill 的实例。在此示例中,您指定 start_color 和 end_color。您还将 fill_type 设置为“solid”。OpenPyXL 还支持使用 GradientFill 作为背景。

尝试运行此代码。运行后,您将拥有一个新的 Excel 文档,如下所示:

以下是您可以使用此代码尝试的一些想法:

•更改受影响的行数或列数•更改您要更改的颜色•更新代码以使用不同颜色为偶数行着色•尝试其他填充类型

完成对背景颜色的试验后,您可以了解如何在单元格中插入图像!

将图像插入单元格

OpenPyXL 使图像插入 Excel 电子表格变得简单。为了实现这个魔法,您可以使用 Worksheet 对象的 add_image() 方法。该方法接受两个参数:

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

对于此示例,您将使用Mouse vs. 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.activeimg = 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 设置合并单元格的值,则必须使用合并单元格的最左上角的单元格。

您还必须使用此特定单元格为整个合并单元格设置样式。您可以将在单个单元格上使用的所有样式和字体设置与合并单元格一起使用。但是,您必须将样式应用于左上角的单元格,才能将其应用于整个合并单元格。

如果您看到一些代码,您就会明白这是如何工作的。继续创建一个名为 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.activesheet.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 带有多种内置样式,您也可以使用。与其在本书中复制完整的内置样式列表,不如查看官方文档,因为它将是样式名称的最新来源。

但是,值得注意的是其中一些样式。例如,以下是您可以使用的数字格式样式:

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

您还可以应用文本样式。以下是这些样式的列表:

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

OpenPyXL 有几个其他的内置样式组。您应该查看文档以了解支持的所有不同样式。

现在您了解了一些可以使用的内置样式,是时候编写一些代码了!创建一个新文件并将其命名为 builtin_styls.py。然后输入以下代码:

# builtin_styles.py
from openpyxl import Workbook
def builtin_styles(path):workbook = Workbook()sheet = workbook.activesheet["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")

在这里,您将三种不同的样式应用于三个不同的单元格。您可以使用“Title”,“Headline 1”和 “Headline 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.activered = "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_stylesheet["A2"].value = "from"sheet["A3"].value = "OpenPyXL"workbook.save(path)
if __name__ == "__main__":named_style("named_style.xlsx")

在这里,您创建了一个 Font()Side() 和 Border() 实例以传递给您的 NamedStyle()。创建自定义样式后,您可以通过设置单元格的样式属性将其应用于单元格。应用自定义样式的方式与应用内置样式的方式相同!

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

当您运行此代码时,您将获得一个如下所示的电子表格:

现在轮到你了!编辑代码以使用 Side 样式,这将更改您的边框。或者创建多个 Side 实例,以便您可以使单元格的每一侧都是唯一的。使用不同的字体或添加自定义背景颜色!

总结

您可以使用 OpenPyXL 对单元格做很多不同的事情。本文中的信息使您能够以优美的方式格式化数据。

在本文中,您了解了以下主题:

•使用字体•设置对齐方式•添加边框•更改单元格背景颜色•将图像插入单元格•样式合并单元格•使用内置样式•创建自定义命名样式

您可以利用在本文中学到的内容制作精美的电子表格。您可以通过更改单元格的背景颜色或字体来突出特定的数据。您还可以使用内置样式更改单元格的格式。OpenPyXL 在处理单元格时非常强大和有价值。

---------End---------

精选资料

回复关键词,获取对应的资料:

关键词 资料名称
600 《Python知识手册》
md 《Markdown速查表》
time 《Python时间使用指南》
str 《Python字符串速查表》
pip 《Python:Pip速查表》
style 《Pandas表格样式配置指南》
mat 《Matplotlib入门100个案例》
px 《Plotly Express可视化指南》

精选内容

  • 神器 VS Code,超详细Python配置使用指南

  • 神器Tushare,财经数据必备工具!

  • Matplotlib 可视化最有价值的 50 个图表

  • 视频:Plotly 和 Dash 在投资领域的应用

完全解读 OpenPyXL 设置 Excel 单元格样式相关推荐

  1. Openpyxl设置Excel 单元格样式

    一.打开Excel文件 方法1: 如果Excel不存在,新建一个Excel import openpyxl # 新建一个Excel wb = openpyxl.Workbook() sheetname ...

  2. 总结Python设置Excel单元格样式的一切,比官方文档还详细。

    Python对Excel表格处理非常方便,本文专门对Excel单元格样式设置进行总结,日常用到的设置基本都可以用openpyxl库完成. 创建一个表格 openpyxl是第三方库,如果你还没有安装,输 ...

  3. 总结Python设置Excel单元格样式的一切,比官方文档还详细

    总结Python设置Excel单元格样式的一切,比官方文档还详细 Python对Excel表格处理非常方便,本文专门对Excel单元格样式设置进行总结,日常用到的设置基本都可以用openpyxl库完成 ...

  4. python学习笔记 - 设置Excel单元格样式

    对openpyxl中[工作簿].[工作页].[行 / 列]与[单元格]的概念存在疑惑的可以参考<Excel工作簿.工作页.行列.单元格介绍>. 本文介绍对Excel单元格的样式进行简单调整 ...

  5. hssfrow 单元格样式_POI设置Excel单元格样式

    POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 先获取工作薄对象: HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb ...

  6. js vue 设置excel单元格样式_vue+elementui 项目纯前端Export2Excel导出excel,并利用xlsx-style设置单元格样式...

    1 /*eslint-disable*/ 2 require('script-loader!file-saver');3 require('./Blob.js'); //blob.js也是网上找的,下 ...

  7. xssfcellstyle设置居中_POI HSSFCellStyle 设置 Excel 单元格样式

    POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 先获取工作薄对象: HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb ...

  8. js vue 设置excel单元格样式_vue项目使用xlsx-style实现前端导出Excel样式修改(添加标题,边框等),并且上传npm踩坑记录...

    前段时间,我们项目提出一个前端导出Excel表格的需求, 这个很简单,利用xlsx,file-saver很容易实现(网上很多教程). 后来需要加入标题,标题居中显示,加入边框等等样式需求,这就给我很多 ...

  9. 说说如何使用 openpyxl 设置 Excel 单元格字体

    首先从 openpyxl.styles 模块中导入 Font 类: import openpyxl from openpyxl.styles import Font 然后建立 Font 对象,通过它来 ...

最新文章

  1. Android挂载以点号(.)开头的文件夹或是文件
  2. 五十八、2020美赛C题的思路以及个人Python的解法
  3. 为什么对gRPC做负载均衡会很棘手?
  4. 从决策树到xgboost(二)
  5. synchronized 解决死锁的问题 轉貼
  6. 全球仅4人,刚毕业年薪201万元 !华为最高档“天才少年”回应...
  7. 【TBSchedule】TBSchedule应用实战手册
  8. win10网络显示已连接到服务器异常,w10 网络连接配置异常如何修复
  9. MATLAB中 / 和 \ 的区别
  10. python调用turtle(海龟画图),画一个正方形
  11. GPC规范--安全域基础概念
  12. 按键精灵 剑网三帮派钓鱼脚本
  13. 从Github下载laravel项目遇到的坑
  14. ‘findstr‘ 不是内部或外部命令,也不是可运行的程序或批处理文件...
  15. 不同的打法,相同的内核,BAT车联网谁也不比谁更强
  16. JavaScript进阶:BOM DOM讲解
  17. esp32 + DHT11温湿度传感器+阿里云物联网平台实时数据显示 实现设备上云
  18. 完全开源Android项目:PDF电子书架软件——不动的大图书馆
  19. 使用html和css进行红米案例、学成在线开发
  20. Facebook、中国BAT均落选,高盛全球“漂亮50”有哪些潜力股?

热门文章

  1. [Go]获取当前时间戳秒/毫秒/纳秒 转成字符串string
  2. SAS统计初学1-卡方检验
  3. Keil中代码前进后退跳转快捷键修改
  4. Apache shiro 官方API (中文版)(承蒙大佬们看重 小弟整理了下 无需积分 编辑的不好 希望帮到你们)
  5. 大厂二面:应对千亿级高并发场景,MySQL如何分库分表?
  6. 再见了 SELECT *!大厂的 MySQL 查询优化方案,确实牛逼!
  7. java字节流与字符流的区别编码缓冲
  8. 剪绳子I和剪绳子II
  9. 【MFC进阶】05文件处理CFile
  10. PS简单操作快捷键,上手快