Python自动化办公_设置Excel样式

一、代码实现

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)

二、知识点概要

Python自动化办公_设置Excel样式_第1张图片

三、打开多个文件

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

​

四、调整工作表列宽

column_dimensions['列名']

调整工作表的列宽,需要用到Sheet.column_dimensions['列位置'].width。这条语句可以确定列位置,并用 width 属性,对该列的列宽进行修改。

ws.column_dimensions['列名'].width = 数值类型,设置列宽。

ws.row_dimensions['行数'].height = 数值类型,设置行高。

五、定义单元格样式的常见用法

Python自动化办公_设置Excel样式_第2张图片

1、导入模块和类

from openpyxl import load_workbook, Workbook

from openpyxl.styles import PatternFill, Alignment, Side, Border, Font

import os

2、Font()类

Font()类用于设置单元格内的字体样式与大小。

语法:Font(name, size, bold, italic)

  • name参数需要传入一个字符串,即字体名称。注: 如果是中文字体,前面必须加 u 对其进行 Unicode 编码。
  • size参数需要传入一个整型,即字体大小。
  • bold参数需要传入一个布尔值,即True/False,是否为粗体。
  • italic参数需要传入一个布尔值,即True/False,是否为斜体。
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'

Python自动化办公_设置Excel样式_第3张图片

3、PatternFill()类

PatternFill()类是对表格颜色的一个填充。

语法:PatternFill(patternType='', fgColor='')

  • patternType参数表示填充形式,一般为'solid'纯色填充
  • fgColor参数需要传入一个十六进制的颜色码,可在以下链接查询:https://baike.baidu.com/item/%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%E9%A2%9C%E8%89%B2%E7%A0%81/10894232?fr=aladdin

例:

# 定义表头颜色样式为橙色
header_fill = PatternFill(patternType='solid', fgColor='FF7F24')
# 定义数据部分颜色样式为淡黄色
content_fill = PatternFill(patternType='solid', fgColor='FFFFE0')
# 定义表尾颜色样式为淡桔红色
bottom_fill = PatternFill(patternType='solid', fgColor='EE9572')

4、Alignment()类

要实现自动换行及字符串对齐方式修改,可以使用styles模块中的Alignment()来先设定好对齐方式,然后应用到指定的cell上。

语法:Alignment(horizontal='', vertical='')

  • horizontal代表水平方向,可以左对齐left,还有居中center和右对齐right,等等。
  • vertical代表垂直方向,可以居中center,还可以靠上top,靠下bottom,等等。

例:

# 定义对齐样式横向居中、纵向居中
align = Alignment(horizontal='center', vertical='center')

5、Border()类与Side()类

Border()方法可以给单元格设置边框,可以同时设置上下左右四个方向。而设置的样式则需要通过Side()方法来进行。

语法:Border(top=Side(style= , color= ) , bottom=Side(style= , color= ) , left=Side(style= , color= ) , right=Side(style= , color= ))

  • style参数需要加入样式类型:thin(细条)、medium(中等)、double(双重)等等。
  • color参数需要加入十六进制颜色码
  • top、bottom、lef、right是单元格的位置,后面接样式。

例:

# 定义边样式为细条
side = Side('thin')
# 定义表头边框样式,有底边和右边
header_border = Border(bottom=side, right=side)
# 定义数据部分边框样式,有左边
content_border = Border(left=side)

六、设置单元格(cell)样式

1、单元格常见用法

cell单元格的常见用法有:cell.value、cell.font、cell.fill、cell.alignment、cell.border

  • 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模块中的类进行设置,定位到工作表的某一格后,直接设置即可。

2、ws.max_row

row_num = ws.max_row     # 获取最后一行行号
column_num = ws.max_column    # 获取最后一列列号
row_num_2 = ws.max_row - 1     # 获取倒数第2行行号

3、ws.iter_rows()

# 遍历从第2行开始的每行内容,values_only=True可以直接获取单元格的值
for row in ws.iter_rows(min_row=2, values_only=True):
    # 遍历每一行内的单元格
    for r in row:
        print(r)

Python自动化办公_设置Excel样式_第4张图片

 

你可能感兴趣的:(python,python,excel)