使用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_dimensions
和 column_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)随手做的笔记。一些概念和例子我个人为更好的理解做了些查询和补充
因本人水平有限,如有任何问题,欢迎大家批评指正!