import os
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Alignment, Side, Border
# 定义表头颜色样式为橙色
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')
# 定义表头边框样式,有底边和右边
header_border = Border(bottom=side, right=side)
# 定义表中、表尾边框样式,有左边
content_border = Border(left=side)
# 设置文件夹路径
path = './各部门利润表汇总_副本/'
# 返回当前目录下所有文件名
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 = 10
ws.column_dimensions['B'].width = 25
ws.column_dimensions['C'].width = 50
ws.column_dimensions['D'].width = 10
ws.column_dimensions['E'].width = 20
ws.column_dimensions['F'].width = 15
# 循环第一行单元格,调整表头样式
for cell in ws[1]:
# 设置单元格填充颜色
cell.fill = header_fill
# 设置单元格对齐方式
cell.alignment = align
# 设置单元格边框
cell.border = header_border
# 获取最后一行行号
row_num = ws.max_row
# 从第二行开始,循环到倒数第二行
for row in ws.iter_rows(min_row=2, max_row=(row_num-1)):
# 循环取出单元格,调整表中样式
for cell in row:
cell.fill = content_fill
cell.alignment = align
cell.border = content_border
# 循环最后一行单元格,调整表尾样式
for cell in ws[row_num]:
cell.fill = bottom_fill
cell.alignment = align
cell.border = content_border
# 保存
wb.save(file_path)
load_workbook()可以打开指定的文件,os.listdir()可以获取指定文件夹内的所有文件,而工作簿的路径又有很强的规律性,都是文件夹路径 + 文件名,那么只需要再加一个循环就可以打开多个文件了:
# 导入模块
import os
# 设置文件夹路径
path = './各部门利润表汇总/'
# 返回当前目录下所有文件名
files = os.listdir(path)
# 循环文件名列表
for file in files:
# 拼接文件路径
file_path = path + file
# 打开工作簿
wb = load_workbook(file_path)
# 打开工作表
ws = wb.active
调整工作表的列宽,需要用到Sheet.column_dimensions['列位置'].width。这条语句可以确定列位置,并用 width 属性,对该列的列宽进行修改。
ws.column_dimensions['列名'].width = 数值类型,设置列宽。
ws.row_dimensions['行数'].height = 数值类型,设置行高。
from openpyxl import load_workbook, Workbook
from openpyxl.styles import PatternFill, Alignment, Side, Border, Font
import os
Font()类用于设置单元格内的字体样式与大小。
语法:Font(name, size, bold, italic)
wb = Workbook()
sheet = wb['Sheet']
# 字体对象
fontObj1 = Font(name=u'微软雅黑', bold=True, italic=True, size=24)
sheet['A1'].font = fontObj1
sheet['A1'] = '微软雅黑、粗体、斜体、字体大小为 24'
fontObj2 = Font(name=u'隶书', bold=False, italic=False, size=32)
sheet['A2'].font = fontObj2
sheet['A2'] = '隶书、字体大小为 32'
PatternFill()类是对表格颜色的一个填充。
语法:PatternFill(patternType='', fgColor='')
例:
# 定义表头颜色样式为橙色
header_fill = PatternFill(patternType='solid', fgColor='FF7F24')
# 定义数据部分颜色样式为淡黄色
content_fill = PatternFill(patternType='solid', fgColor='FFFFE0')
# 定义表尾颜色样式为淡桔红色
bottom_fill = PatternFill(patternType='solid', fgColor='EE9572')
要实现自动换行及字符串对齐方式修改,可以使用styles模块中的Alignment()来先设定好对齐方式,然后应用到指定的cell上。
语法:Alignment(horizontal='', vertical='')
例:
# 定义对齐样式横向居中、纵向居中
align = Alignment(horizontal='center', vertical='center')
Border()方法可以给单元格设置边框,可以同时设置上下左右四个方向。而设置的样式则需要通过Side()方法来进行。
语法:Border(top=Side(style= , color= ) , bottom=Side(style= , color= ) , left=Side(style= , color= ) , right=Side(style= , color= ))
例:
# 定义边样式为细条
side = Side('thin')
# 定义表头边框样式,有底边和右边
header_border = Border(bottom=side, right=side)
# 定义数据部分边框样式,有左边
content_border = Border(left=side)
cell单元格的常见用法有:cell.value、cell.font、cell.fill、cell.alignment、cell.border
# 定义表头颜色样式为橙色
header_fill = PatternFill(patternType='solid', fgColor='FF7F24')
# 定义数据部分颜色样式为淡黄色
content_fill = PatternFill(patternType='solid', fgColor='FFFFE0')
# 定义表尾颜色样式为淡桔红色
bottom_fill = PatternFill(patternType='solid', fgColor='EE9572')
# 定义边样式为细条
side = Side('thin')
# 定义表头边框样式,有底边和右边
header_border = Border(bottom=side, right=side)
# 定义数据部分边框样式,有左边
content_border = Border(left=side)
# 循环第一行单元格,调整表头样式
for cell in sheet['1']:
# 用定义好的样式,去设置单元格填充颜色
cell.fill = header_fill
# 设置单元格对齐方式
cell.alignment = align
# 设置单元格边框
cell.border = header_border
# 从第二行开始,循环每一行
for row in sheet.iter_rows(min_row=2):
# 循环改行单元格,调整样式
for cell in row:
cell.fill = content_fill
cell.alignment = align
cell.border = content_border
# 获取最后一行行号
row_num = sheet.max_row
# 循环最后一行单元格,调整表尾颜色样式
for cell in sheet[row_num]:
cell.fill = bottom_fill
以上几种方法都需要结合style模块中的类进行设置,定位到工作表的某一格后,直接设置即可。
row_num = ws.max_row # 获取最后一行行号
column_num = ws.max_column # 获取最后一列列号
row_num_2 = ws.max_row - 1 # 获取倒数第2行行号
# 遍历从第2行开始的每行内容,values_only=True可以直接获取单元格的值
for row in ws.iter_rows(min_row=2, values_only=True):
# 遍历每一行内的单元格
for r in row:
print(r)