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

2023-11-05

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

Python对Excel表格处理非常方便,本文专门对Excel单元格样式设置进行总结,日常用到的设置基本都可以用openpyxl库完成。

创建一个表格

openpyxl是第三方库,如果你还没有安装,输入下方命令安装。

pip install openpyxl

在开始设置单元格前,先创建一个excel表格,下方代码可以新建一个Excel表格,并写入内容。

# coding=utf-8
import openpyxl


# 创建一个excel表格对象
wb = openpyxl.Workbook()
# 获取当前活跃的sheet页,默认就是第一个sheet页
ws = wb.active
# 在表格的单元格中写入内容
ws.cell(row=2, column=3).value = '小斌哥ge'
ws.cell(row=2, column=4).value = '小斌哥ge'
# 处理完成后保存表格,会在当前目录生成一个excel文件
wb.save(filename='cell.xlsx')
# 关闭表格对象
wb.close()

效果:
在这里插入图片描述

代码含义参考注释,我在两个相邻的单元格中写入了相同的内容,后面的代码对一个单元格设置样式,另一个单元格不做处理,方便对比。

给单元格写入内容的方式有两种,一种是给cell的value属性赋值,如上面的代码,另一种是用cell的参数设置,如ws.cell(row=2, column=3, value=‘xxx’),两种方式结果一样。

本文后面的代码全部都添加在单元格写入内容后,保存内容(wb.save())前,顺序不能弄反了。(导包的代码可以统一放到前面)

单元格字体和文字样式

from openpyxl.styles import Font

# 设置字体和文字样式
font = Font(name="微软雅黑", size=12, color='FF0000', bold=True, 
            italic=True, underline='single', strike=False)
ws.cell(row=2, column=3).font = font

效果:
在这里插入图片描述
字体和文字样式使用Font类设置,赋值给cell()的font属性。

Font类常用参数说明:

  • name: 字体名称。
  • size: 字体大小。
  • color: 字体颜色。使用16进制的RGB颜色值,这里的颜色值中没有#。
  • bold: 设置字体加粗,布尔值。
  • italic: 设置字体倾斜,布尔值。
  • underline: 设置下划线的样式,默认没有。共有single, double, singleAccounting, doubleAccounting四种选择,single单线,double双线,不带Accounting长度与文字一致,带Accounting长度与单元格宽度一致。
  • strike: 设置中划线,布尔值。

设置单元格高和宽

# 设置宽高
# row_dimensions中指定要设置高度的行
ws.row_dimensions[2].height = 50
# column_dimensions中指定要设置宽度的列
ws.column_dimensions['C'].width = 20

效果:
在这里插入图片描述

单元格的高和宽不是按单元格设置,而是按行和按列设置,因为Excel中同一行的高度和同一列的宽度相同。

设置方法:

  • ws.row_dimensions[2].height: 设置第2行的高。
  • ws.column_dimensions[‘C’].width: 设置C列的宽。

注意,指定行时使用数字,指定列时使用大写字母。这与Excel的行列编号一致。

单元格对齐方式

from openpyxl.styles import Alignment

# 设置内容的对齐方式
align = Alignment(horizontal='left', vertical='center', text_rotation=0, 
                  wrap_text=True, shrink_to_fit=True, indent=1)
ws.cell(row=2, column=3).alignment = align

效果:
在这里插入图片描述
单元格对齐方式使用Alignment类设置,赋值给cell()的alignment属性。

Alignment类常用参数说明:

  • horizontal: 水平方向对齐方式。默认general(常规),可以设置为:left(左对齐),center(居中),right(右对齐),distributed(分散对齐),centerContinuous(跨列居中),justify(两端对齐),fill(填充)。
  • vertical: 垂直方向对齐方式。可以设置为:top(顶端对齐),center(居中), bottom(底部对齐),justify(两端对齐),distributed(分散对齐)。
  • text_rotation: 单元格旋转角度。旋转方向为逆时针,旋转后内容排列方向发生变化。
  • wrap_text: 设置自动换行,布尔值。
  • shrink_to_fit: 内容自适应单元格大小,布尔值。
  • indent: 缩进,传入缩进的字符数。

单元格填充颜色

from openpyxl.styles import PatternFill

# 设置单元格填充颜色和样式
pattern = PatternFill(fill_type='lightUp', start_color="0000FF", end_color='00FF00')
ws.cell(row=2, column=3).fill = pattern

效果:
在这里插入图片描述

单元格填充颜色使用PatternFill类设置,赋值给cell()的fill属性。

PatternFill类参数说明:

  • fill_type: 填充样式,如完整填充,虚线填充,斜线填充等,通常使用solid。可以设置的样式有:lightTrellis, lightGray, mediumGray, darkHorizontal, lightHorizontal, darkGrid,
    darkDown, gray0625, lightDown, solid, darkTrellis, lightVertical,
    lightUp, gray125, lightGrid, darkVertical, darkGray,
    darkUp,就不一一介绍了,可以自己多尝试。
  • start_color: 设置填充颜色。颜色值与前面一样,使用16进制的RGB颜色值,不带#。
  • end_color: 设置背景颜色。如果填充颜色没有填满(例如斜线填充),空隙处看到的是背景颜色。

PatternFill类还有三个参数,与上面的三个参数作用是重复的,patternType等价于fill_type,fgColor等价于start_color,bgColor等价于end_color。openpyxl单元格设置的好几个类都有这种参数重复的情况,其他类就不重复介绍了。

单元格填充渐变颜色

from openpyxl.styles import GradientFill

# linear模式,根据stop设置的多个颜色渐变填充,degree设置顺时针的旋转角度
# gradient = GradientFill(type='linear', degree=30, 
#                         stop=('FF0000', '00FF00', '0000FF'))
# path模式,根据stop设置的多个颜色从左上角至右下角、由内至外填充,
# left,right,top,bottom设置上下左右距离边框的距离百分比
gradient = GradientFill(type='path', left=0.1, right=0.1, top=0.1, bottom=0.1, 
                        stop=('FF0000', '00FF00', '0000FF'))
ws.cell(row=2, column=3).fill = gradient

效果:
linear模式
在这里插入图片描述path模式
在这里插入图片描述
单元格填充渐变颜色使用GradientFill类设置,赋值给cell()的fill属性。

GradientFill类参数说明:

  • type: 填充模式,分为两种模式’linear’、‘path’。
  • stop: 设置渐变填充用的多个颜色,传入一个由RGB颜色值组成的元组。

linear模式:根据stop设置的多个颜色从左至右渐变填充。

  • degree: 设置渐变填充颜色顺时针的旋转角度。

path模式:根据stop设置的多个颜色从左上角至右下角、由内至外渐变填充。

  • left: 设置颜色到左边框的距离百分比(具体请看截图的效果),设置为0到1的小数。
  • right: 设置颜色到右边框的距离百分比。
  • top: 设置颜色到上边框的距离百分比。
  • bottom: 设置颜色到下边框的距离百分比。四个值可以不同。

设置单元格边框样式

from openpyxl.styles import Side, Border

# 设置线条的样式和颜色
side = Side(style="thick", color="FF0000")
# 设置单元格的边框线条
border = Border(top=side, bottom=side, left=side, right=side)
ws.cell(row=2, column=3).border = border

效果(为了显示得更明显,先将颜色填充的代码注释掉):
在这里插入图片描述
单元格边框样式使用Border类设置,赋值给cell()的border属性。边框线条的样式使用Side类设置,传给Border类中的参数。

Side类参数说明:

  • style: 设置线条样式,常用样式有medium, thin, thick。可以设置的样式有:dashDotDot, thick, mediumDashDotDot, thin, dotted, mediumDashed, dashDot, double, medium,
    hair, mediumDashDot, dashed, slantDashDot,不一一介绍,可以自己多尝试。
  • color: 设置线条颜色。

Border类常用参数说明:

  • top: 设置单元格的上边框,传入Side类实例。
  • bottom: 设置单元格的下边框。
  • left: 设置单元格的左边框。
  • right: 设置单元格的右边框。

注意,设置单元格边框样式时,前面设置单元格对齐方式中的单元格旋转参数text_rotation会影响边框的角度,可以根据需要配合修改,通常设置text_rotation为0。

Border类中,还有一些其他参数,outline设置整个单元格的边框,vertical设置垂直方向,horizontal设置水平方向,diagonal设置对角线, diagonal_direction设置对角线的角度,不过openpyxl有些版本不支持这些参数。所以,统一使用上下左右就行了,而且这样可以给不同边设置不一样的样式。

使用openpyxl内置样式

# 使用内置样式
ws.cell(row=2, column=3).style = 'Title'

效果:
在这里插入图片描述
openpyxl内置了很多设置好的样式,可以直接赋值给cell()的style属性。

可以用的内置样式有:

  • 常规:即没有样式,Normal。
  • 数字样式:Comma, Comma [0], Currency, Currency [0], Percent。
  • 信息样式:Calculation, Total, Warning Text, Explanatory Text。
  • 文本样式:Title, Headline 1, Headline 2, Headline 3, Headline 4, Hyperlink, Followed Hyperlink, Linked Cell。
  • 比较样式:Input, Output, Check Cell, Good, Bad, Neutral。
  • 高亮样式:Accent1, 20 % - Accent1, 40 % - Accent1, 60 % - Accent1, Accent2, 20 % - Accent2, 40 % - Accent2, 60 % - Accent2, Accent3, 20 % - Accent3, 40 % - Accent3, 60 % - Accent3, Accent4, 20 % - Accent4, 40 % - Accent4, 60 % - Accent4, Accent5, 20 % - Accent5, 40 % - Accent5, 60 % - Accent5, Accent6, 20 % - Accent6, 40 % - Accent6, 60 % - Accent6, Pandas。

提供的样式非常多,可以慢慢尝试。

当然,也可以自定义样式,利用前面介绍的方式定义好字体、对齐方式等,然后借助NamedStyle()类,将前面设置的样式传入NamedStyle()类中生成一个实例,然后赋值给cell()的style属性。受篇幅限制就不再详细演示了。

from openpyxl.styles import NamedStyle

此外,也可以将前面设置好的各种样式封装到一个函数中,重复调用,与自定义样式的效果异曲同工。

合并单元格

ws.cell(row=5, column=5).value = '秦'
ws.cell(row=5, column=6).value = 'A'
ws.cell(row=5, column=7).value = 'B'
ws.cell(row=5, column=8).value = 'W'
ws.cell(row=6, column=5).value = 'C'
ws.cell(row=6, column=6).value = 'D'
ws.cell(row=6, column=7).value = 'E'
ws.cell(row=6, column=8).value = 'W'
# 合并单元格
ws.merge_cells(start_row=5, start_column=5, end_row=6, end_column=7)
# ws.merge_cells(range_string='E5:G6')

效果:
在这里插入图片描述
在合并前,先在表格中写入一些内容,然后对其中的部分单元格进行合并。

合并单元格使用ws.merge_cells()方法,参数介绍:

  • start_row: 开始合并的行。
  • start_column: 开始合并的列。
  • end_row: 结束合并的行。
  • end_column: 结束合并的列。这四个值所在的行/列都会被合并(闭区间)。
  • range_string: 指定合并的单元格范围,如E5:G6,第一个值是左上角的单元格,第二个值是右下角的单元格。

如果没有设置range_string,则merge_cells()会根据前四个参数自动计算出range_string。如果五个参数都设置了,则range_string会覆盖前四个参数的设置。

合并单元格后,除了左上角的单元格的值保留,其他单元格的值都会被删除,并且其他单元格都变成了只读(read-only)单元格,不能写入内容。

给合并后的单元格设置前文介绍的各种样式时,字体、对齐方式、颜色填充用左上角的单元格设置,高宽按行列设置,边框样式要依次对每一个被合并的处于边缘的单元格设置。

取消合并单元格

# 取消合并单元格
ws.unmerge_cells(start_row=5, start_column=5, end_row=6, end_column=7)
# ws.merge_cells(range_string='E5:G6')

效果:
在这里插入图片描述
取消合并单元格使用ws.unmerge_cells()方法,参数与ws.merge_cells()方法完全一样。

取消合并后,合并单元格时被删除的内容不能恢复,除了左上角的单元格,其他单元格的内容为空,可以重新写入内容。

总结

本文完整总结了用Python设置Excel单元格样式的知识,全是干货,非常值得收藏。

文中用一个单元格做演示,实际使用时经常需要批量操作,这个时候加个for循环,改变cell()中的row, column值,就可以批量处理了。批量处理的方法还有很多,可以因地制宜。

本文简单易学,很多地方比官方文档还详细,希望对你有帮助,期待你的三连。

参考文档:
openpyxl官方文档:https://openpyxl.readthedocs.io/en/stable/styles.html#cell-styles

相关阅读
用Python制作我的核酸检测日历
Python使用openpyxl模块读写excel文件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Excel 对象库文件在哪里

    我正在寻找 Excel 对象库文件以将其导入 LabVIEW 我安装了 MS Office 2013 可以找到 MSACC olb MSOUTL olb MSPPT olb 和 MSWORD olb 但无法确定要导入哪个文件 olb 或 d
  • 如何测试顶级窗口是否打开?

    我感觉 Python 编程可能不是我的菜 我创建了一个 tkinter GUI 它使用按钮回调来打开另一个窗口 其他搜索说这个窗口应该是顶级窗口 并且它工作得很好 但是每次按下按钮时它都会打开另一个相同的窗口 如据我所知 窗口 问题 如何测
  • Keras,如何获取每一层的输出?

    我已经用 CNN 训练了一个二元分类模型 这是我的代码 model Sequential model add Convolution2D nb filters kernel size 0 kernel size 1 border mode
  • 在一张图中同时绘制两个截面强度

    我有一个形状数组 512 512 看起来像 行 x 列 y 密度 z 数组的数量 0 012825 0 020408 0 022976 0 015938 0 02165 0 024357 0 036332 0 031904 0 025462
  • 01 无效令牌[重复]

    这个问题在这里已经有答案了 嘿 学习 python3有一段时间了 遇到字典和dictionary name get 方法并尝试获取随机键值 问题 data data get key 1 它有效并且返回 1 但如果我使用data get ke
  • 将 stdout 重定向到 Python 中的文件? [复制]

    这个问题在这里已经有答案了 如何将 stdout 重定向到 Python 中的任意文件 当长时间运行的 Python 脚本 例如 Web 应用程序 从 ssh 会话内启动并处于后台 并且 ssh 会话关闭时 应用程序将引发 IOError
  • Python:如何重构循环导入

    我有件事可以帮你做engine setState
  • Python 3.x 中的 PIL ImageTk 等效项

    我正在使用 Tkinter 开发一个应用程序 它使用以下数据库png图标的图像文件 为了在应用程序中使用所述图像 我使用 PIL 打开它们Image open 运行它通过ImageTk PhotoImage函数 然后将其传递给小部件构造函数
  • Python3模拟用另一个函数替换函数

    如何使用 python 中的另一个函数来模拟一个函数 该函数也将提供一个模拟对象 我有类似以下操作的代码 def foo arg1 arg2 r bar arg1 does interesting things 我想替换的实现bar函数 让
  • 将 JSON 字符串传递给 Django 模板

    我一直在用头撞墙 试图找出为什么我无法将从 Django 模型生成的 JSON 字符串传递到模板的 javascript 静态文件中 事实证明 问题不在模型级别 使用serializers serialize 在脚本本身中放入相同的字符串将
  • 如何在Python中正确声明ctype结构+联合?

    我正在制作一个二进制数据解析器 虽然我可以依靠 C 但我想看看是否可以使用 Python 来完成该任务 我对如何实现这一点有一些了解 我当前的实现如下所示 from ctypes import class sHeader Structure
  • 从文档字符串生成 sphinx 文档不起作用

    我有一个具有以下结构的项目 我想保留 my project build here is where sphinx should dump into requirements txt make bat Makefile more config
  • 将带有两层分隔符的字符串转换为字典 - python

    给定一个字符串 s x t1 ny t2 nz t3 我想转换成字典 sdic x 1 y 2 z 3 我通过这样做让它工作 sdic dict tuple j split t for j in i for i in s split n F
  • Scrapy - 不会爬行

    我正在尝试运行递归爬行 由于我编写的爬行不能正常工作 因此我从网络上提取了一个示例并进行了尝试 我真的不知道问题出在哪里 但是爬行没有显示任何错误 谁能帮我这个 另外 是否有任何逐步调试工具可以帮助理解蜘蛛的爬行流程 非常感谢任何与此相关的
  • 写入 UDP 套接字会被阻塞吗?

    如果是的话 在什么条件下 或者 换句话说 在twisted 中运行此代码是否安全 class StatsdClient AbstractStatsdClient def init self host port super StatsdCli
  • 如何在 Pandas 数据框中用 NaN 替换一系列值?

    我有一个巨大的数据框 我应该如何用 NaN 替换一系列值 200 100 数据框 您可以使用pd DataFrame mask https pandas pydata org pandas docs stable generated pan
  • 在 Gensim 中通过 ID 检索文档的字符串版本

    我正在使用 Gensim 进行一些主题建模 并且已经达到使用 LSI 和 tf idf 模型进行相似性查询的程度 我取回 ID 集和相似点 例如 299501 0 64505910873413086 如何获取与 ID 在本例中为 29950
  • 在没有numpy的情况下在python中分配变量NaN

    大多数语言都有一个 NaN 常量 您可以使用它为变量分配值 NaN python 可以在不使用 numpy 的情况下做到这一点吗 是的 使用math nan https docs python org 3 library math html
  • 提供节点名或服务名,或未知

    我收到这个 Python 错误 File Library Frameworks Python framework Versions 2 7 lib python2 7 urllib2 py line 1184 in do open rais
  • 在 pip 中为 Flask 应用程序构建 docker 映像失败

    from alpine latest RUN apk add no cache python3 dev pip3 install upgrade pip WORKDIR backend COPY backend RUN pip no cac

随机推荐

  • 《移动浪潮》读书笔记

    移动浪潮 一书深入浅出地解读了信息革命第五次浪潮即将为人们生活带来的巨变 首先论述移动的力量 它是一股无法阻挡的浪潮 将引发颠覆性的革命 随后从电脑逐渐小型化 纸张的消失 娱乐的自由 钱包 社交网络 医疗 教育乃至工农业等方方面面论述移动互
  • 线程池参数

    一 ThreadPoolExecutor核心参数说明 1 corePoolSize 核心线程数 核心线程会一直存活 及时没有任务需要执行 当线程数小于核心线程数时 即使有线程空闲 线程池也会优先创建新线程处理 设置allowCoreThre
  • shell判断一个变量是否为空

    shell判断一个变量是否为空 author 润明 2012 2 1 QQ 226399587 http blog csdn net runming918 判断一个变量是否为空 1 变量通过 引号引起来 如下所示 可以得到结果为 IS NU
  • 数据库管理系统

    1 数据库 DB 指长期保存在计算机的存储设备上 按照一定规则组织起来 可以被各种用户或应用共享的数据集合 2 数据库管理系统 DBMS 指一种操作和管理数据库的大型软件 用于建立 使用和维护数据库 对数据库进行统一的管理和控制 以保证数据
  • 工具使用 [ idea远程服务断点调试 ]

    目录 1 概述 1 1 远程代码调试 1 1 1 idea配置 1 1 2 准备HTTP接口 1 1 3 启动远程服务 1 概述 在开发的过程当中 断点调试是我们比较常用的操作 不管是用来解析代码流程 还是用来排查程序错误 都会去使用到断点
  • 高校俱乐部审核期长安大学星辰同学参观CSDN总部

    7月15日早上北京大雨瓢泼 一大早就接到长安大学星辰同学的消息 要来CSDN与我们交流学习 星辰同学填完加入高校俱乐部申请信息后 我们是通过电话和qq与他联系的 据他所说是他的家人推荐他申请加入CSDN高校俱乐部 并且能够增加经验和锻炼能力
  • echarts饼图,自定义legend,解决legend字数太多和太长的问题,翻页处理

    echarts饼图 自定义legend 解决legend字数太多和太长的问题 翻页处理 https blog csdn net weixin 43899935 article details 107185591 版权 tooltip tri
  • 测试中遇到的问题总结

    一 后端问题 数据库存储相关 1 做更新操作后 发现数据没更新 根因 先读取后更新 解决方案 更新再读取 2 缓存数据未及时更新 导致操作不成功 及时更新缓存数据 正常情况在 一分钟内会将数据库数据同步到缓存 如果用户在一分钟之内同时操作了
  • mmdetection 环境配置mmcv和pytorch对照

    版本一 old mmdetection v1 1 0 python 3 7 9 Driver Version 440 33 01 CUDA Version 10 2 mmcv 0 4 3 mmdet 1 1 0 51df8a9 root d
  • IntelliJ IDEA 详细使用教程 – 主题,字体,类和方法注释设置

    IDEA是Java开发者最喜爱的开发工具之一 高端大气 智能化 个性化 每个开发者都喜欢设置自己喜欢的主题 字体 打造一个属于自己的IDE 本次介绍在IDEA中 如何设置主题 字体等样式 和添加类 方法注释 Windows用户直接点击菜单看
  • python接口自动化测试 ( 第三章)

    如果你不太明白这篇文章是做什么的 点击下方进入介绍篇 点击跳转到介绍篇 你可以知道自己能收获什么 和将要做的功能点和是否值得学习 别再迷茫了 不日进 则日退 学习才是你应该做的事情 进入介绍篇了解你将要走的路 python接口自动化测试 第
  • abapdata定义方法_ABAP中types与data,type与like的区别

    1 types与data区别 types是用来自定义某种类型的 需要data实例化才能使用 data是用来声明基本类型数据对象 也就是实例变量 对于用data直接定义的结构体对象 不参照其它结构类型 参照自定义类型生成新数据语法格式 TYP
  • 快速记忆电阻器色环值

    快速记忆电阻器色环值 觉得有用麻烦点个赞哦 开始正文 最近准备电设 看到电阻器11种色环 实在难记 因此花了我整整5 分钟 想出了一个快速记忆的方法 直接上图 上图是标准色环和阻值对应表 下面是我的简记方法 1 谐音组词记忆yyds 2 简
  • Mysql 主从复制

    简述 start slave show slave status G stop slave reset slave delete relay log create relay log reset master delete bin log
  • langchain包下载安装以及基本使用的注意事项

    当我们使用import langchain导入包是需要先下载langchain这个包 注意事项 我们的python版本必须大于等于3 8 1 否者将会导致 cannot import name RecursiveCharacterTextS
  • python三维点云投影(一)

    本文为博主原创文章 未经博主允许不得转载 本文为专栏 python三维点云从基础到深度学习 系列文章 地址为 https blog csdn net suiyingy article details 124017716 一 立体几何基础知识
  • MySQL的多表查询

    目录 多表关系 一对多 多对多 一对一 多表查询概述 分类 显示内连接 外连接 左外连接 右外连接 自连接 联合查询 子查询 分类 标量子查询 列子查询 行子查询 表子查询 多表关系 项目开发中 在进行数据库表结构设计时 会根据业务需求及业
  • 链表介绍

    链表介绍 链表与顺序表一样 也属于线性表 一个线性表是某类数据元素的一个集合 表里同时记录着元素之间的顺序关系 线性表的数据之间有顺序关系 顺序关系分为两种 一种是物理有序 即数据物理存储的位置顺序与数据之间的顺序关系一致 另一种是逻辑有序
  • VS Stuidio 2019实用调试技巧

    VS Studio 2019实用调试技巧 1 debug和release的区别 2 调试 1 调试最常使用的几个快捷键 2 用监视窗口查看临时变量的值 3 查看内存信息 4 查看调用堆栈 5 查看汇编信息 6 查看寄存器信息 3 如何写出易
  • 总结Python设置Excel单元格样式的一切,比官方文档还详细

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