python的openpyxl库设置表格样式:字体/边框/对齐/颜色等
学习目录
1. 安装和使用openpyxl库设置表格样式
2 设置字体font
3 设置边框
4 设置对齐方式
5 设置单元格数据格式
6 设置行高和列宽
7 填充单元格颜色
附录-关于颜色说明
本章节主要介绍如何使用openpyxl库设置表格中的一些样式,比如字体,边框,对齐方式,单元格格式,行高和列宽等。
1 安装和使用openpyxl库设置表格样式
执行pip命令安装openpyx库:
pip install openpyxl -i https://mirrors.aliyun.com/pypi/simple/
目前最新版本3.1.5,安装后在styles目录下有多个模块
在styles目录的文件__init__.py中导入了一些常用的类。
2 设置字体font
我们先导入Font类:
from openpyxl.styles import Font
Font类初始化函数如下:
一些常用参数具体解释如下:
name |
设置字体名称。比如"Arial","Times New Roman","微软雅黑",‘宋体’,‘仿宋’等 |
sz或者size |
字体大小,比如数字11 |
i或者italic |
是否设置斜体。 |
strike |
是否设置删除线。 |
outline |
是否设置轮廓 |
shadow |
是否设置阴影 |
colour |
字体颜色 |
b或者bold |
是否设置加粗 |
underline |
是否设置下划线 |
family |
设置字体集。 |
charset |
设置字符集 |
其中字体的颜色需要用到类openpyxl.colors.Color类
对应的一些color信息在colors.py文件最上方的元组COLOR_INDEX中有预置的颜色数据
黑色BLACK为第1个元素,白色WHITE为第2个元素,红色RED为第3个元素等
所以颜色对象可设置为:
from openpyxl.styles import colors
#颜色设置为红色
color_ins = colors.Color(index=2)
关于颜色的说明,参考文章最末尾。
在单元格上设置字体,完整代码如下:
from openpyxl.styles import Font,colors
from openpyxl import Workbook
wb = Workbook()
#先创建1个sheet对象
sheet0 = wb.create_sheet('sheet0',0)
#单元格设置内容
cell0 = sheet0.cell(1,1,'hello python')
#设置字体对象 颜色为红色
font_ins = Font(name="微软雅黑", sz=18, family=2, b=True, i=True,
color=colors.Color(index=2), scheme="minor")
#将字体对象赋予单元格
cell0.font = font_ins
#保存文件
wb.save('1.xlsx') #保存文件
结果如下:
3 设置边框
跟设置字体一样,我们先导入Border类和Side类:
from openpyxl.styles import Border,Side
Border类初始化函数如下:
初始化函数的常用参数解释如下:
left |
设置左边框,为一个Side对象,可以指定边框的样式(如细线、粗线等)和颜色。 |
right |
设置右边框,同上 |
top |
设置上边框,同上 |
bottom |
设置下边框,同上 |
diagonal |
设置对角线样式,同上 |
diagonalUp |
设置对角线的方向,表示从右上到左下。 |
diagonalDown |
设置对角线的方向,表示从左上到右下。 |
而Side类同Border类在同一模块文件中:
由于Border类的各个边框属性(left、right、top、bottom等)都是Side对象,因此了解Side类的属性也很重要:
"thin":细线;"medium":中等粗细线;"thick":粗线
"double":双线;"hair":细线;"dotted":点线
"dashDot":点划线;"dashDotDot":双点划线;"dashed":虚线
"dashDotDot":双点划线;"mediumDashDot":中等点划线
"mediumDashed":中等虚线;"mediumDashDotDot":中等双点划线
"slantDashDot":斜线点划线
测试代码如下:
from openpyxl import Workbook
from openpyxl.styles import Border, Side
# 创建一个新的工作簿和工作表
wb = Workbook()
sheet0 = wb.active
# 创建一个Border对象并设置其属性
border = Border(
left=Side(style='thick', color='FF0000'), # 左边框:粗线,红色
right=Side(style='thin', color='FF0000'), # 右边框:细线,红色色
top=Side(style='double', color='FF0000'), # 顶部边框:双线,红色
bottom=Side(style='medium', color='FF0000') # 底部边框:粗线,红色
diagonal=Side(style='medium', color='000000'),# 对角线:粗线,黑色
diagonalDown=True #对角线,左上到右下
)
# 将Border对象应用到单元格的边框属性上
sheet0 ['A1'].border = border
# 也可以为特定区域设置边框
for row in sheet0 ['A1:C3']:
for cell in row:
cell.border = border
# 保存工作簿
wb.save("2.xlsx")
结果:
4 设置对齐方式
跟设置字体一样,我们先导入Alignment类
from openpyxl.styles import Alignment
Alignment类初始化函数如下:
主要属性具体解释如下:
horizontal |
设置水平对齐方式 ‘general’(默认): 一般对齐 ‘left’:左对齐 ‘center’:居中对齐 ‘right’:右对齐 ‘fill’:填充对齐 ‘justify’:两端对齐 ‘centerContinuous’:连续居中对齐 ‘distributed’:分散对齐 |
vertical |
设置垂直对齐方式 ‘top’:顶部对齐 ‘center’:居中对齐 ‘bottom’:底部对齐 ‘justify’:两端对齐 ‘distributed’:分散对齐 |
shrinkToFit |
如果为True,当文本过长时,将缩小字体以适应单元格宽度;默认为False。 |
textRotation或者text_rotation |
设置字体旋转方向,数值为0-180之间的数字 |
indent |
文本缩进级别,整数值,默认为0。 |
wrapText或者wrap_text |
是否设置自动换行 |
测试代码:
from openpyxl import Workbook
from openpyxl.styles import Alignment
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 创建一个对齐对象并设置属性
alignment = Alignment(horizontal='center', vertical='center', wrap_text=True, indent=1, text_rotation=20)
# 设置一个单元格对象并应用对齐方式的对象
ws['A1'] = "Hello Pyhon"
ws['A1'].alignment = alignment
# 保存工作簿到文件
wb.save('3.xlsx')
结果:
5 设置单元格数据格式
导入数据格式的字典:
from openpyxl.styles.numbers import BUILTIN_FORMATS
字典如下:
跟excel表中我们定义单元格格式中的自定义格式是一样的
测试代码如下:
from openpyxl import Workbook
from openpyxl.styles.numbers import BUILTIN_FORMATS
# 创建一个新的Excel工作簿和工作表
wb = Workbook()
ws = wb.active
# 将一些数据写入单元格
ws['A1'] = 12345.6789
# 设置单元格A1的数字格式为带有两位小数的格式
ws['A1'].number_format = BUILTIN_FORMATS[2]
#填入日期
ws['B1'] = datetime(2024,11,23)
# 设置日期格式
ws['B1'].number_format = BUILTIN_FORMATS[16]
# 保存Excel文件
wb.save('4.xlsx')
结果如下:
6 设置行高和列宽
使用Worksheet对象的row_dimensions和column_dimensions属性来设置行高和列宽。
测试代码:
from openpyxl import Workbook
# 创建一个新的工作簿和工作表
wb = Workbook()
sheet = wb.active
# 设置第2行的高度为30(单位通常是磅)
sheet.row_dimensions[2].height = 30
# 设置第C列的宽度为20 (这是一个字符宽度单位,不是像素或磅)
sheet.column_dimensions['C'].width = 20
# 保存工作簿
wb.save('5.xlsx')
7 填充单元格颜色
跟设置字体一样,我们先导入PatternFill类
from openpyxl.styles import PatternFill
PatternFill类初始化函数如下:
None:没有填充样式。
solid:实心填充。
darkVertical:暗色的垂直线条填充。
darkHorizontal:暗色的水平线条填充。
darkGrid:暗色的网格线条填充。
darkTrellis:暗色的网格线条填充。
lightHorizontal:亮色的水平线条填充。
lightVertical:亮色的垂直线条填充。
lightGrid:亮色的网格线条填充。
lightTrellis:亮色的网格线条填充。
gray0625:灰色的网格线条填充。
lightGray:亮灰色的网格线条填充。
darkGray:暗灰色的网格线条填充。
darkUp:暗色的向上对角线条填充。
darkDown:暗色的向下对角线条填充。
darkGrid:暗色的网格线条填充。
darkTrellis:暗色的 trellis 网格线条填充。
测试代码:
from openpyxl import Workbook
from openpyxl.styles import PatternFill,colors
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 选择一个单元格并应用填充颜色
ws['A1'].fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="darkUp")
# 设置单元格的值
ws['A1'] = "这是一个黄色背景的单元格"
# 选择一个单元格并应用填充颜色
ws['A2'].fill = PatternFill(fgColor=colors.Color(indexed="778899"), bgColor=colors.Color(indexed="778899"),
fill_type="lightTrellis")
# 设置单元格的值
ws['A2'] = "这是一个浅石板灰背景的单元格"
# 选择一个单元格并应用填充颜色
ws['A3'].fill = PatternFill(start_color="F0F8FF", end_color="F0F8FF", fill_type="solid")
# 设置单元格的值
ws['A3'] = "这是一个爱丽丝蓝背景的单元格"
# 保存工作簿
wb.save("example.xlsx")
结果:
附录
关于颜色说明
在OpenPyXL库中,用于Excel电子表格处理时,颜色是以RGB (Red, Green, Blue) 或者 16 进制格式来表示的。16进制颜色代码通常由#开头,随后跟着六个字符,前两个代表红色分量(00 到 FF),中间两个代表绿色分量,最后两个代表蓝色分量(同样范围)。例如,#FF0000 表示红色,#00FF00 表示绿色,#0000FF 表示蓝色。
形像颜色 |
对应颜色 |
形像颜色 |
对应颜色 |
纯白 |
FFFFFF |
亮紫色 |
FF00FF |
纯黑 |
000000 |
纯紫 |
FF00FF |
象牙色 |
FFFFF0 |
纯红 |
FF0000 |
浅黄色 |
FFFFE0 |
老饰带 |
FDF5E6 |
柠檬黄 |
FFFF00 |
浅秋麒麟黄 |
FAFAD2 |
黄色 |
FFFF00 |
亚麻布 |
FAF0E6 |
雪 |
FFFAFA |
古代的白色 |
FAEBD7 |
花的白色 |
FFFAF0 |
鲜肉(鲑鱼)色 |
FA8072 |
柠檬薄纱 |
FFFACD |
幽灵的白色 |
F8F8FF |
玉米色 |
FFF8DC |
适中的春天的绿色 |
F5FFFA |
海贝壳 |
FFF5EE |
白烟 |
F5F5F5 |
偏红的淡紫色 |
FFF0F5 |
小麦色 |
F5DEB3 |
番木瓜 |
FFEFD5 |
沙棕色 |
F4A460 |
漂白的杏仁 |
FFEBCD |
蔚蓝色 |
F0FFFF |
薄雾玫瑰 |
FFE4E1 |
蜂蜜 |
F0FFF0 |
(浓汤)乳脂,番茄等 |
FFE4C4 |
爱丽丝蓝 |
F0F8FF |
鹿皮鞋 |
FFE4B5 |
卡其布 |
F0E68C |
Navajo白 |
FFDEAD |
淡珊瑚色 |
F08080 |
桃色 |
FFDAB9 |
灰秋麒麟 |
EEE8AA |
金 |
FFD700 |
紫罗兰 |
EE82EE |
粉红 |
FFC0CB |
深鲜肉(鲑鱼)色 |
E9967A |
浅粉色 |
FFB6C1 |
薰衣草花的淡紫色 |
E6E6FA |
橙色 |
FFA500 |
淡青色 |
E1FFFF |
浅鲜肉(鲑鱼)色 |
FFA07A |
结实的树 |
DEB887 |
深橙色 |
FF8C00 |
李子 |
DDA0DD |
珊瑚 |
FF7F50 |
Gainsboro |
DCDCDC |
热情的粉红 |
FF69B4 |
猩红 |
DC143C |
番茄 |
FF6347 |
苍白的紫罗兰红色 |
DB7093 |
橙红色 |
FF4500 |
秋麒麟 |
DAA520 |
深粉色 |
FF1493 |
兰花的紫色 |
DA70D6 |
蓟 |
D8BFD8 |
淡蓝色 |
87CEFA |
浅灰色 |
D3D3D3 |
天蓝色 |
87CEEB |
晒黑 |
D2B48C |
灰色 |
808080 |
巧克力 |
D2691E |
橄榄绿 |
808000 |
秘鲁 |
CD853F |
紫色 |
800080 |
印度红 |
CD5C5C |
栗色 |
800000 |
适中的紫罗兰红色 |
C71585 |
绿玉 |
7FFFAA |
银白色 |
C0C0C0 |
查特酒绿 |
7FFF00 |
深卡其布 |
BDB76B |
草坪绿 |
7CFC00 |
玫瑰棕色 |
BC8F8F |
适中的板岩暗蓝灰色 |
7B68EE |
适中的兰花紫 |
BA55D3 |
浅石板灰 |
778899 |
耐火砖 |
B22222 |
石板灰 |
708090 |
火药蓝 |
B0E0E6 |
米色(浅褐色) |
6B8E23 |
淡钢蓝 |
B0C4DE |
板岩暗蓝灰色 |
6A5ACD |
苍白的绿宝石 |
AFEEEE |
暗淡的灰色 |
696969 |
绿黄色 |
ADFF2F |
矢车菊的蓝色 |
6495ED |
淡蓝 |
ADD8E6 |
军校蓝 |
5F9EA0 |
深灰色 |
A9A9A9 |
橄榄土褐色(褐绿色) |
556B2F |
棕色 |
A52A2A |
靛青 |
4B0082 |
黄土赭色 |
A0522D |
适中的绿宝石 |
48D1CC |
深兰花紫 |
9932CC |
深岩暗蓝灰色 |
483D8B |
苍白的绿色 |
98FB98 |
钢蓝 |
4682B4 |
深蓝紫色 |
9400D3 |
宝蓝 |
4.17E+04 |
适中的蓝紫色 |
9370DB |
绿宝石 |
40E0D0 |
淡绿色 |
90EE90 |
春天的绿色 |
3CB371 |
深海洋绿 |
8FBC8F |
酸橙绿 |
32CD32 |
马鞍棕色 |
8B4513 |
深石板灰 |
2F4F4F |
深紫色 |
8B008B |
海洋绿 |
2E8B57 |
深红色 |
8B0000 |
森林绿 |
228B22 |
深紫罗兰的蓝色 |
8A2BE2 |
浅海洋绿 |
20B2AA |
道奇蓝 |
1E90FF |
深天蓝 |
00BFFF |
午夜的蓝色 |
191970 |
深青色 |
008B8B |
水绿色,青色 |
00FFFF |
水鸭色 |
008080 |
薄荷奶油 |
00FF7F |
深绿色 |
006400 |
绿色 |
00FF00 |
蓝色 |
0000FF |
适中的碧绿色 |
00FA9A |
适中的蓝色 |
0000CD |
深绿宝石 |
00CED1 |
深蓝色 |
00008B |
海军蓝,深靛蓝 |
000080 |
作者:科雷learning