总结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值,就可以批量处理了。批量处理的方法还有很多,可以因地制宜。
本文简单易学,很多地方比官方文档还详细,希望对你有帮助,期待你的三连。
参考文档:
[1] openpyxl官方文档:https://openpyxl.readthedocs.io/en/stable/styles.html#cell-styles
自动化办公我还是非常推荐下面这几本书的,有需要的同学可以公众号后台咨询小助手。公众号:后台输入:小助手 ,暗号(自动化书).
推荐阅读:
入门: 最全的零基础学Python的问题 | 零基础学了8个月的Python | 实战项目 |学Python就是这条捷径
干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 | 从万众期待到口碑扑街!唐探3令人失望 | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
趣味:弹球游戏 | 九宫格 | 漂亮的花 | 两百行Python《天天酷跑》游戏!
AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!| 再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|
年度爆款文案
1).卧槽!Pdf转Word用Python轻松搞定!
2).学Python真香!我用100行代码做了个网站,帮人PS旅行图片,赚个鸡腿吃
3).首播过亿,火爆全网,我分析了《乘风破浪的姐姐》,发现了这些秘密
4).80行代码!用Python做一个哆来A梦分身
5).你必须掌握的20个python代码,短小精悍,用处无穷
6).30个Python奇淫技巧集
7).我总结的80页《菜鸟学Python精选干货.pdf》,都是干货
8).再见Python!我要学Go了!2500字深度分析!
9).发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片
点阅读原文,看B站50个Python实战视频!
总结Python设置Excel单元格样式的一切,比官方文档还详细。相关推荐
- 总结Python设置Excel单元格样式的一切,比官方文档还详细
总结Python设置Excel单元格样式的一切,比官方文档还详细 Python对Excel表格处理非常方便,本文专门对Excel单元格样式设置进行总结,日常用到的设置基本都可以用openpyxl库完成 ...
- python学习笔记 - 设置Excel单元格样式
对openpyxl中[工作簿].[工作页].[行 / 列]与[单元格]的概念存在疑惑的可以参考<Excel工作簿.工作页.行列.单元格介绍>. 本文介绍对Excel单元格的样式进行简单调整 ...
- 完全解读 OpenPyXL 设置 Excel 单元格样式
来源:Python中文社区 OpenPyXL 使您能够以多种不同的方式设置单元格的样式.样式化单元格会让您的电子表格充满魅力!这将有助于将它们与其他电子表格区分开来.但是请不要过度使用, 如果每个单元 ...
- Openpyxl设置Excel 单元格样式
一.打开Excel文件 方法1: 如果Excel不存在,新建一个Excel import openpyxl # 新建一个Excel wb = openpyxl.Workbook() sheetname ...
- hssfrow 单元格样式_POI设置Excel单元格样式
POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 先获取工作薄对象: HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb ...
- js vue 设置excel单元格样式_vue+elementui 项目纯前端Export2Excel导出excel,并利用xlsx-style设置单元格样式...
1 /*eslint-disable*/ 2 require('script-loader!file-saver');3 require('./Blob.js'); //blob.js也是网上找的,下 ...
- xssfcellstyle设置居中_POI HSSFCellStyle 设置 Excel 单元格样式
POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 先获取工作薄对象: HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb ...
- js vue 设置excel单元格样式_vue项目使用xlsx-style实现前端导出Excel样式修改(添加标题,边框等),并且上传npm踩坑记录...
前段时间,我们项目提出一个前端导出Excel表格的需求, 这个很简单,利用xlsx,file-saver很容易实现(网上很多教程). 后来需要加入标题,标题居中显示,加入边框等等样式需求,这就给我很多 ...
- Apache-POI 设置excel单元格样式字体等
大概思路就是设置样式以及字体后添加进单元格中 Workbook wb = new XSSFWorkbook(); Sheet sheet = wb.getSheetAt(0); //创建单元格 Row ...
最新文章
- java基础 多维数组_java基础:3.2 多维数组
- CTFshow php特性 web92
- NIO和BIO如何影响应用程序的设计-API调用
- 一文读懂开源许可证异同
- RabbitMQ延迟消息的极限是多少?
- VUE基础(躺着都能会)
- java中Collection和Collections的区别和联系
- c语言代码格式的简单介绍
- php revel,Revel 概念
- Android获取本地IP
- 使用pip出现报错:Could not find a version that satisfies the...No matching distribution distributio...
- java 集合之HashMap 源码阅读记录
- 自学备考教师资格证笔试的方法
- K8s 污点(Taints)与容忍(Tolerations)
- 清除APP 数据的时候出现Crash的情况分析
- android软件无法联网,关于android软件wifi联网无法使用的问题
- 上帝的心态发生了改变---太原市-------从热血沸腾到麻木不仁
- ubuntu下android开发安装手机驱动
- 谷歌浏览器如何查css,谷歌浏览器查看编辑元素CSS样式_谷歌工具
- C/S客户端渗透测试(一)客户端渗透环境配置
热门文章
- 腾讯云服务器+RAKSmart国内外服务器使用记录
- 微信订阅号如何开通付费功能
- 焊接机器人编程c语言,机器人现场编程与调试(cnc上下料,弧焊,喷涂,点焊等),就是这么全!...
- 如何检查浏览器存储中个人证书的存在
- java换行转义字符串_回车,换行,转义字符“\r”,“\n”是什么关系?
- 领存技术至强 E5-2648L 6U VPX 通用密集计算刀片
- 怎么判断两个多项式互素_多项式互素性质的补充讨论
- 程序员进 ICU 昏迷五六天,恢复后决定辞职回乡改行送菜
- 菜鸟知识-五大智能手机操作系统
- 【wmi】C++获取windows激活状态