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

news2025/1/12 4:09:06

总结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文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/75045.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何撰写好的科研论文:摘要(1)

导读 本系列将切片介绍如何写好科研论文,包含了:摘要,背景介绍,方法,结果,讨论等,本文[1]将从摘要开始。 1. 标准 Criteriapointline一般背景听众中的每个人都关心的事情。具体背景从每个人都关…

免费内网穿透工具测评对比,谁更好用 1

文章目录1. 前言2. 对比内容1.1官网主页对比1.2 用户注册对比1.3 用户功能页面对比1.4 客户端对比3. 结语1. 前言 自从接触到内网穿透服务,知道能把自家的电脑、树莓派、NAS等等一堆硬件改造成服务器后,笔者就陷入其中无法自拔,一会儿把树莓…

jmeter接口测试之大家都来我家领豆子

一、测试目的: 2万用户不停请求云豆领取接口时,查看服务器内存占用情况,从而确认服务器内存占用异常的情况是否得到修复。 二、测试策略: 用2万个账号,以每2秒100次请求的速度向服务器发出请求,观察内存…

c#入门-顶级语句和Main方法

程序入口 在你运行程序以后会弹出一个窗口,显示一行文字:Hello world 现在将代码中的所有东西再复制一遍。然后运行,就会得到两行Hello world 显然,我们的程序是写在这里的。 在这里写了什么,什么就会生效。 Main方…

【自动化测试】Pytest+Appium+Allure 做 UI 自动化的那些事

文本主要介绍下 PytestAllureAppium 记录一些过程和经历。 法主要用了啥: Python3 Appium Allure-pytest Pytest Appium 不常见却好用的方法 Appium 直接执行 adb shell 方法 Appium 启动时增加 --relaxed-security 参数 Appium 即可执行类似adb shell的方法 appium -p 4…

短视频账号搭建之Banner图和视频封面

前面在我赢小禾呈序里学了账号名称、头像和个人简介设置,今天把账号搭建的最后两部分一起公开: banner图是你主页上面的这个主图。 同样它的存在可以有三个作用: 第一个作用比较简单,就是让你的主页更好看。 听起来太简单了&am…

【软件测试】测试人在团队中没地位?怎么办?为什么会出现这样的问题?

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 为什么会出现这样的…

Linux 学习之:如何让代码在后台保持运行

文章目录nohup 命令使用场景使用方法nohup ... &nohup ... > train.log 2>&1 &结束进程参考文章nohup 命令 使用场景 比如我要在服务器里运行如下代码来训练我的深度学习模型: python train.py但是这样运行你一旦合上笔记本电脑或者换个工作环…

java版商城多商家入驻商城 直播带货商城 电子商务

一个好的SpringCloudSpringBoot b2b2c 电子商务平台涉及哪些技术、运营方案?以下是我结合公司的产品做的总结,希望可以帮助到大家! 搜索体验小程序:海哇 1. 涉及平台 平台管理、商家端(PC端、手机端)、买家…

vxe table 虚拟滚动 表格每一行的高度不一致 出现空白

今天在做表格数据时&#xff0c;发现滚动表格会出现空白区域&#xff0c;如图所示 虚拟滚动表格每一行的高度不一致, 导致表格滚动时出现空白区域 然后在查阅资料时发现有设置:row-config"{height: 70}"这种 &#xff0c;试过发现不行 以下这个不可行 <vxe-grid…

论文常用 | FineBI v6.0 新图表 | 箱形图

箱形图&#xff08;Box-plot&#xff09;又称为盒须图、盒式图或箱线图&#xff0c;是一种用作显示一组数据分散情况资料的统计图&#xff0c;因形状如箱子而得名。在各种领域也经常被使用&#xff0c;常见于品质管理。它主要用于反映原始数据分布的特征&#xff0c;还可以进行…

突破重围,攻“新”为上!凯里亚德与郁锦香酒店以创新势能获投资者青睐

近日&#xff0c;汇聚国内众多投资人的锦江酒店(中国区)品牌沙龙会烟台站顺利举行。本次沙龙活动以“齐风鲁韵 锦绘未来”为主题&#xff0c;锦江酒店(中国区)旗下众多优秀品牌共同亮相。凯里亚德酒店与郁锦香酒店在本次活动中向投资人展示了在如今复杂多变的酒店市场中如何以强…

载波层叠调制在多电平变换器及两电平变换器中的应用

1. 载波层叠调制在MMC中的应用 载波层叠调制在MMC中应用广泛。通过上下桥臂的调制波和多个载波进行比较&#xff0c;得到每个桥臂应该投入的模块数。如下图所示&#xff0c;上下桥臂各有4个模块&#xff0c;每个模块的电容电压是uc&#xff0c;直流侧电压是4uc。A相下桥臂的调制…

Qt 模型视图编程之 ItemDataRole

背景 Qt 中的模型视图架构是用来实现大量数据的存储、处理及其显示的&#xff0c;主要原理是将数据的存储与显示分离&#xff1a;模型定义了标准接口对数据进行访问&#xff1b;视图通过标准接口获取数据并定义显示方式&#xff1b;模型使用信号与槽机制通知视图数据变化。 Q…

C语言百日刷题第十四天

前言 今天是刷题第14天&#xff0c;放弃不难&#xff0c;但坚持一定很酷~ 临近期末&#xff0c;集中把模拟卷的编程题都刷一下 C语言百日刷题第十四天前言模拟题&#xff08;一&#xff09;1.设计程序实现比较两数大小2.排序成绩模拟题&#xff08;二&#xff09;1.求最大值…

力扣(LeetCode)138. 复制带随机指针的链表(C++)

模拟 第一趟遍历&#xff0c;在结点的右侧复制映射。第二趟遍历&#xff0c;复制 randomrandomrandom。第三趟遍历&#xff0c;将链表中的映射结点取出作为新链表。 初始链表如图①。 有必要说明&#xff0c;原结点如 111~555 &#xff0c;映射结点就是 1‘11‘~5‘55‘。 复…

学习笔记--截止12.9 CVAT使用方法、STCN代码使用方法、bitahub使用方法

CVAT使用方法&#xff08;12.5-12.7&#xff09; 对学长来说是一个标注数据集的好工具&#xff0c;但对我来说是个新的知识点 使用这个工具&#xff0c;我们要得到一张有蒙层的图片 然后CVAT的使用方法&#xff08;网上居然没有教程&#xff0c;&#xff0c;&#xff0c;官网的…

金山表单结果如何自动通知至钉钉

金山表单内置了丰富的模版&#xff0c;从表单、接龙、问卷、投票&#xff0c;可以满足你各种表单数据数据收集的需求。但是很多用户经常也会有一个痛点&#xff0c;通过金山表单收集的信息&#xff0c;如何才能实时通知企业微信/钉钉/飞书呢&#xff1f; 比如防疫登记、安全复工…

茶馆无线wifi短信认证方案

茶馆提供公共的无线wifi上网服务&#xff0c;需对用户进行实名认证。手机短信实名认证以其用户体验、综合成本等优势&#xff0c;成为茶馆无线上网认证的首选方案。 一、茶馆如何实现无线wifi短信认证 茶馆要实现访客无线上网短信认证功能&#xff0c;需要借助上网行为管理设备…

SuperMap云套件发布达梦工作空间数据

作者&#xff1a;John GIS云套件和经典版iServer一样可以发布DM数据&#xff0c;同样也和iServer一样需要引入DM依赖包&#xff0c;需要对云套件的ispeco-dashboard-api 和 gisapp-* 镜像进行补充DM依赖包&#xff0c;其补充DM主要有以下几个步骤&#xff0c;本文将通过ispeco-…