使用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

如图:

windows pywpsrpc库操作wps openpyxl wps_ide

个性化工作标签栏

给不同的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')

结果如图:

windows pywpsrpc库操作wps openpyxl wps_赋值_02

调整行高与列宽(修改工作表的 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')

结果如图:

windows pywpsrpc库操作wps openpyxl wps_ide_03

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

第二行的行高:

windows pywpsrpc库操作wps openpyxl wps_python_04

第C列的列宽:

windows pywpsrpc库操作wps openpyxl wps_python_05

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

合并 merge_cells()

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

结果如图:

windows pywpsrpc库操作wps openpyxl wps_python_06

拆分 unmerge_cells()

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

结果如图:

windows pywpsrpc库操作wps openpyxl wps_实例化_07

冻结窗口 freeze_panes()

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

设置单元格字体

即修改 openpyxl.styles.Font 类。其参数如图:

windows pywpsrpc库操作wps openpyxl wps_python_08



详解见官方文档: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里的字体:

windows pywpsrpc库操作wps openpyxl wps_实例化_09

B3里的字体:

windows pywpsrpc库操作wps openpyxl wps_实例化_10

填充单元格

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

填充单元格的背景颜色,通过实例化并修改 openpyxl.styles.PatternFill的类来实现。其参数如下:

windows pywpsrpc库操作wps openpyxl wps_实例化_11

其中fill_type 对应填充类型在excel里对应设置单元格里填充里图案样式:

windows pywpsrpc库操作wps openpyxl wps_python_12

## 导入模块
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')

两个的结果:

windows pywpsrpc库操作wps openpyxl wps_赋值_13

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

参数:(detail:https://openpyxl.readthedocs.io/en/latest/api/openpyxl.styles.borders.html )

windows pywpsrpc库操作wps openpyxl wps_实例化_14

这里还需要一个 openpyxl.styles.Side 实例化对象

openpyxl.styles.Side 类是线条的种类,其参数:

windows pywpsrpc库操作wps openpyxl wps_赋值_15

其对应excel里:

windows pywpsrpc库操作wps openpyxl wps_赋值_16

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')

效果如图:

windows pywpsrpc库操作wps openpyxl wps_ide_17

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

参数:

windows pywpsrpc库操作wps openpyxl wps_赋值_18

# 例子: 将 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')

结果如图:

windows pywpsrpc库操作wps openpyxl wps_python_19

命名样式

步骤:
(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')

结果如图:

windows pywpsrpc库操作wps openpyxl wps_实例化_20

附言:
本文为自学B站上鱼C的python课程(【办公篇】《极客Python之效率革命》P3-P4)随手做的笔记。一些概念和例子我个人为更好的理解做了些查询和补充
因本人水平有限,如有任何问题,欢迎大家批评指正!