应用场景:将数个excel表的格式调整成统一的
思路:
一、打开工作表
import os
# 设置文件夹路径
path='./test/'
# 返回当前目录下所有文件名
files = os.listdir(path)
# 循环文件名列表
for file in files:
# 拼接文件路径
file_path = path + file
# 打开工作簿
wb = load_workbook(file_path)
# 打开工作表
ws = wb.active
二、调整列宽
需要用到Sheet.column_dimensions['列位置'].width
#调整列宽
ws.column_dimensions['A'].width=20
ws.column_dimensions['B'].width=30
三、定义单元格样式
选择样式属性,定义该属性的样式值 , 赋值修改(具体各个)单元格的样式值。
对于所有单元格样式的修改可以分为两个功能块:“定义单元格样式” 和 “循环修改单元格”。
1.边框样式由Cell.border
属性表示
2.颜色填充由Cell.fill
属性表示
3.对齐方式由Cell.alignment
属性表示。
#定义单元格样式
#定义表头颜色为橙色
header_fill=PatternFill('solid',fgColor='FF7F24')
#定义表中颜色为浅黄色
content_fill=PatternFill('solid',fgColor='FFFFE0')
#定义表尾颜色为淡橘红色
bottom_fill=PatternFill('solid',fgColor='EE9572')
#定义对其方式,纵向居中,横向居中
align=Alignment(horizontal='center',vertical='center')
#定义边样式为细条
side=Side('thin')
#定义表头边框样式有底边、右边
head_border=Border(bottom=side,right=side)
#定义表中边框样式有左边
content_border=Border(left=side)
四、循环修改表格样式
1、修改“表头”的单元格样式
表头是第一行的单元格,取出这一行用ws[1]
。然后就可以用for cell in ws[1]
取出每个单元格,再来对单元格的样式属性进行修改。
#取出第一行单元格
for cell in ws[1]:
#设置单元格填充颜色
cell.fill=header_fill
#设置单元格对其方式
cell.alignment=align
#设置单元格边框
cell.border=head_border
2、修改“表中”的单元格样式
取出工作表中一定范围的数据,使用iter_rows(min_row,max_row)
,此时values_only
默认为False,要进行样式修改的,不能只取数值,从第2行到倒数第2行。
#取出表中的各行,第二行到倒数第二行
for row in ws.iter_rows(min_row=2,max_row=ws.max_row-1):
for cell in row:
cell.fill=content_fill
cell.alignment=align
cell.border=content_border
3、修改“表尾”的单元格样式
#取出表尾
for cell in ws[ws.max_row]:
cell.fill=bottom_fill
cell.alignment=align
cell.border=content_border
五、保存工作簿
wb.save(file_path)
结果如下:
完成代码如下:
# 导入模块
import os
from openpyxl import load_workbook
from openpyxl.styles import PatternFill,Alignment,Side,Border
# 设置文件夹路径
path='./test/'
# 返回当前目录下所有文件名
files = os.listdir(path)
# 循环文件名列表
for file in files:
# 拼接文件路径
file_path = path + file
# 打开工作簿
wb = load_workbook(file_path)
# 打开工作表
ws = wb.active
#调整列宽
ws.column_dimensions['A'].width=20
ws.column_dimensions['B'].width=30
#定义单元格样式
#定义表头颜色为橙色
header_fill=PatternFill('solid',fgColor='FF7F24')
#定义表中颜色为浅黄色
content_fill=PatternFill('solid',fgColor='FFFFE0')
#定义表尾颜色为淡橘红色
bottom_fill=PatternFill('solid',fgColor='EE9572')
#定义对其方式,纵向居中,横向居中
align=Alignment(horizontal='center',vertical='center')
#定义边样式为细条
side=Side('thin')
#定义表头边框样式有底边、右边
head_border=Border(bottom=side,right=side)
#定义表中边框样式有左边
content_border=Border(left=side)
#取出第一行单元格
for cell in ws[1]:
#设置单元格填充颜色
cell.fill=header_fill
#设置单元格对其方式
cell.alignment=align
#设置单元格边框
cell.border=head_border
#取出表中的各行,第二行到倒数第二行
for row in ws.iter_rows(min_row=2,max_row=ws.max_row-1):
for cell in row:
cell.fill=content_fill
cell.alignment=align
cell.border=content_border
#取出表尾
for cell in ws[ws.max_row]:
cell.fill=bottom_fill
cell.alignment=align
cell.border=content_border
wb.save(file_path)