openpyxl 速成课 N2

使用Python 处理 excel 速成课(openpyxl 实现)Note 2

本课时主要是一些 openpyxl 对 excel 的一些格式或美化的操作

# 准备工作

import openpyxl
print(openpyxl.__version__)

# 创建一个 demo excel 文件
wb = openpyxl.Workbook()
ws1 = wb.create_sheet(title = 'S1')
ws2 = wb.create_sheet(title = 'S2')
ws3 = wb.create_sheet(title = 'S3')
ws4 = wb.create_sheet(title = 'S4')
wb.save('demo2.xlsx')
3.1.2

如图:
请添加图片描述

个性化工作标签栏

给不同的sheet的标签赋予不一样的颜色。对sheet的 sheet_properties.tabColor 属性进行直接修改

ws1.sheet_properties.tabColor = 'FF0000' # RGB 格式表示颜色,前两位是红,中间两位是绿,最后两位是蓝。这里'FF0000'表示纯红
ws2.sheet_properties.tabColor = '00FF00'
ws3.sheet_properties.tabColor = '0000FF'
ws4.sheet_properties.tabColor = '8B008B' # 这个颜色表示紫色
wb.save('demo2.xlsx')

结果如图:
在这里插入图片描述

调整行高与列宽(修改工作表的 row_dimensionscolumn_dimensions 属性)

描述:row_dimensions 里使用具体数字表示要修改第几行的高度,如 row_dimensions[2].height 来修改第二行的高度;
column_dimensions 里使用字母来表示对应的列号,如 column_dimensions['C'].width 来修改C列的宽度
注意 height 是 row_dimensions 的属性,width 是 column_dimensions 的属性。切勿混淆

ws2.row_dimensions[2].height = 100
ws2.column_dimensions['C'].width = 50
wb.save('demo2.xlsx')

结果如图:
在这里插入图片描述

看起来列宽50大于行高100,是因为二者的单位不同。

第二行的行高:
在这里插入图片描述

第C列的列宽:
在这里插入图片描述

合并和拆分单元格 (merge_cells()unmerge_cells())

合并 merge_cells()

# merge_cells()
ws1.merge_cells('A1:C3')
ws1['A1'] = '德州二村' # 合并后新的合并的单元格是A1,这里我们给A1赋值
wb.save('demo2.xlsx')

结果如图:
在这里插入图片描述

拆分 unmerge_cells()

ws1.unmerge_cells('A1:C3')
wb.save('demo2.xlsx')
# 注意 excel 里 原来是怎么合并的,拆分的时候就应该怎么拆。即拆分的范围必须和合并的范围统一
# 比如这里 ws1.unmerge_cells('A1:C2') 就会报错

结果如图:
在这里插入图片描述

冻结窗口 freeze_panes()

# 指定一个单元格(此处为B2),这个单元格上面行的和左边列的都被冻结(此处为第一行和第A列)
ws3.freeze_panes = 'B2' # 冻结
ws3.freeze_panes = 'A1' # 解冻 (A1的上面无行,左边无列,即解冻)
ws3.freeze_panes = None # 解冻

设置单元格字体

即修改 openpyxl.styles.Font 类。其参数如图:
在这里插入图片描述

详解见官方文档:https://openpyxl.readthedocs.io/en/stable/styles.html

# 举一个列子
## 方便起见,重新导入一些模块
from openpyxl import Workbook
from openpyxl.styles import Font

## 实例化一个工作簿用以演示
wb = Workbook()
ws = wb.active # 获取该工作簿下的工作表

b2 = ws['B2'] # 取出一个单元格对象来操作
b2.value = 'raw'
bold_red_font = Font(bold=True, color='FF0000')
b2.font = bold_red_font

b3 = ws['B3']
b3.value = 'ALDI'
italic_strike_blue_16font = Font(size=16, italic=True, strike=True,color='0000FF')
b3.font = italic_strike_blue_16font

wb.save('demo2.xlsx')

结果如图:
B2里的字体:
在这里插入图片描述

B3里的字体:
在这里插入图片描述

填充单元格

纯色填充 (openpyxl.styles.PatternFill类)

填充单元格的背景颜色,通过实例化并修改 openpyxl.styles.PatternFill的类来实现。其参数如下:
在这里插入图片描述

其中fill_type 对应填充类型在excel里对应设置单元格里填充里图案样式:
在这里插入图片描述

## 导入模块
from openpyxl.styles import PatternFill
yellow_fill = PatternFill(fill_type = 'solid', fgColor = 'FFFF00') # red + green = yellow
b2.fill = yellow_fill

wb.save('demo2.xlsx')

渐近填充 (openpyxl.styles.GradientFill类)

参数:(detail: https://openpyxl.readthedocs.io/en/stable/api/openpyxl.styles.fills.html)
type: ‘linear’(线性渐变) /‘path’(中心扩散)
degree: 旋转角度
stop:一个元组(OO,XX),OO为起始颜色,XX为结束颜色

from openpyxl.styles import GradientFill
red2green_fill = GradientFill(type = 'linear', stop =('FF0000','00FF00')) # from red to green
b3.fill = red2green_fill
wb.save('demo2.xlsx')

两个的结果:
在这里插入图片描述

设置边框 (openpyxl.styles.Border 类)

参数:(detail:https://openpyxl.readthedocs.io/en/latest/api/openpyxl.styles.borders.html )
在这里插入图片描述

这里还需要一个 openpyxl.styles.Side 实例化对象
openpyxl.styles.Side 类是线条的种类,其参数:
在这里插入图片描述

其对应excel里:
在这里插入图片描述

from openpyxl.styles import Border, Side

thin_side = Side(border_style='thin', color = '000000') # '000000' is black
double_side = Side(border_style = 'double', color = '0000FF')

b2.border = Border(diagonal = thin_side, diagonalUp = True, diagonalDown = True)
b3.border = Border(left = double_side, top = double_side, right = double_side, bottom = double_side)
wb.save('demo2.xlsx')

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

文本对齐 (openpyxl.styles.Alignment 类)

参数:
在这里插入图片描述

# 例子: 将 A1 到 C2 单元格进行合并,合并后居中文本
from openpyxl.styles import Alignment

ws.merge_cells('A1:C2') 
ws['A1'].value = '白天鹅宾馆'

center_alignment = Alignment(horizontal = 'center', vertical = 'center')
ws['A1'].alignment = center_alignment
wb.save('demo2.xlsx')

结果如图:
在这里插入图片描述

命名样式

步骤:
(1) 实例化一个 NamedStyle 类
(2) 初始化命名样式
(3) 注册命名样式到工作簿中
(4) 将单元格的 style 属性赋值为命名样式

from openpyxl.styles import NamedStyle

# 实例化一个 NamedStyle 类
highlight = NamedStyle(name = 'highlight')

# 初始化命名样式
highlight.font = Font(bold=True, size=20)
highlight.alignment = Alignment(horizontal='center', vertical='center')

# 注册命名样式到工作簿中
wb.add_named_style(highlight)

# 将单元格的 style 属性赋值为命名样式
ws['A6'].value = '金沙厅'
ws['A6'].style = highlight

wb.save('demo2.xlsx')

结果如图:
在这里插入图片描述




附言:
本文为自学B站上鱼C的python课程(【办公篇】《极客Python之效率革命》P3-P4)随手做的笔记。一些概念和例子我个人为更好的理解做了些查询和补充
因本人水平有限,如有任何问题,欢迎大家批评指正!
原视频链接:https://www.bilibili.com/video/BV1wp411o71g?p=2&vd_source=6999af1d1ba811ac01f8eed2325bee07

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值