本章节主要介绍如何使用openpyxl库设置表格中的一些样式,比如字体,边框,对齐方式,单元格格式,行高和列宽等。
1 安装和使用openpyxl库设置表格样式
执行pip命令安装openpyx库:
pip install openpyxl -i https://mirrors.aliyun.com/pypi/simple/
目前最新版本3.1.5,安装后在styles目录下有多个模块
在styles目录的文件__init__.py中导入了一些常用的类。
- color类: 设置颜色
- font类: 设置字体
- alignment类:设置示对齐方式
- border和side:设置边框样式
- patternfill:填充单元格颜色
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类的属性也很重要:
- style:指定边框的样式。可选值如下:
"thin":细线;"medium":中等粗细线;"thick":粗线
"double":双线;"hair":细线;"dotted":点线
"dashdot":点划线;"dashdotdot":双点划线;"dashed":虚线
"dashdotdot":双点划线;"mediumdashdot":中等点划线
"mediumdashed":中等虚线;"mediumdashdotdot":中等双点划线
"slantdashdot":斜线点划线
- color:设置边框的颜色。可以使用颜色名称的字符串。
测试代码如下:
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类初始化函数如下:
- fill_type: 填充类型
none:没有填充样式。
solid:实心填充。
darkvertical:暗色的垂直线条填充。
darkhorizontal:暗色的水平线条填充。
darkgrid:暗色的网格线条填充。
darktrellis:暗色的网格线条填充。
lighthorizontal:亮色的水平线条填充。
lightvertical:亮色的垂直线条填充。
lightgrid:亮色的网格线条填充。
lighttrellis:亮色的网格线条填充。
gray0625:灰色的网格线条填充。
lightgray:亮灰色的网格线条填充。
darkgray:暗灰色的网格线条填充。
darkup:暗色的向上对角线条填充。
darkdown:暗色的向下对角线条填充。
darkgrid:暗色的网格线条填充。
darktrellis:暗色的 trellis 网格线条填充。
- start_color: 起始颜色,输入颜色16进制的字符串。
- end_color: 结束颜色,输入颜色16进制的字符串。
- fgcolor:起始颜色,通常为color对象
- bgcolor:结束颜色,通常为color对象
测试代码:
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 |
总结
到此这篇关于python中openpyxl库设置表格样式之字体/边框/对齐/颜色等的文章就介绍到这了,更多相关python openpyxl库设置表格样式内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论