• 20201203-6 设置excel样式【】


     1-1
    1
    import os 2 from openpyxl import load_workbook 3 from openpyxl.styles import PatternFill, Alignment, Side, Border 4 5 # 定义表头颜色样式为橙色 6 header_fill = PatternFill('solid', fgColor='FF7F24') 7 # 定义表中、表尾颜色样式为淡黄色 8 content_fill = PatternFill('solid', fgColor='FFFFE0') 9 # 定义表尾颜色样式为淡桔红色 10 bottom_fill = PatternFill('solid', fgColor='EE9572') 11 12 # 定义对齐样式横向居中、纵向居中 13 align = Alignment(horizontal='center', vertical='center') 14 15 # 定义边样式为细条 16 side = Side('thin') 17 # 定义表头边框样式,有底边和右边 18 header_border = Border(bottom=side, right=side) 19 # 定义表中、表尾边框样式,有左边 20 content_border = Border(left=side) 21 22 # 设置文件夹路径 23 path = './各部门利润表汇总_副本/' 24 # 返回当前目录下所有文件名 25 files = os.listdir(path) 26 27 # 循环文件名列表 28 for file in files: 29 # 拼接文件路径 30 file_path = path + file 31 # 打开工作簿 32 wb = load_workbook(file_path) 33 # 打开工作表 34 ws = wb.active 35 36 # 调整列宽 37 ws.column_dimensions['A'].width = 10 38 ws.column_dimensions['B'].width = 25 39 ws.column_dimensions['C'].width = 50 40 ws.column_dimensions['D'].width = 10 41 ws.column_dimensions['E'].width = 20 42 ws.column_dimensions['F'].width = 15 43 44 # 循环第一行单元格,调整表头样式 45 for cell in ws[1]: 46 # 设置单元格填充颜色 47 cell.fill = header_fill 48 # 设置单元格对齐方式 49 cell.alignment = align 50 # 设置单元格边框 51 cell.border = header_border 52 53 # 获取最后一行行号 54 row_num = ws.max_row 55 56 # 从第二行开始,循环到倒数第二行 57 for row in ws.iter_rows(min_row=2, max_row=(row_num-1)): 58 # 循环取出单元格,调整表中样式 59 for cell in row: 60 cell.fill = content_fill 61 cell.alignment = align 62 cell.border = content_border 63 64 # 循环最后一行单元格,调整表尾样式 65 for cell in ws[row_num]: 66 cell.fill = bottom_fill 67 cell.alignment = align 68 cell.border = content_border 69 70 # 保存 71 wb.save(file_path)

    第 22-34 行实现了功能块一——打开工作表。
    第 36-42 行实现了功能块二——对工作表列宽的调整。
    第 5-20 行实现了功能块三——定义单元格样式。
    第 44-68 行实现了功能块四——循环修改单元格。
    1-1-1
    如何打开活动工作表
    1
    # 导入openpyxl库中的load_workbook函数 2 from openpyxl import load_workbook 3 # 文件存储路径 4 file_path = './material/事业01部_副本.xlsx' 5 # 打开工作簿 6 wb = load_workbook(file_path) 7 # 打开活动工作表 8 ws = wb.active
    1-1-2
    如何定位到工作表的某一行
    #
    导入模块 from openpyxl import load_workbook # 打开工作表 file_path = './material/事业01部_副本.xlsx' wb = load_workbook(file_path) ws = wb.active # 取出工作表第二行所有单元格,打印它们的值 for cell in ws[2]: print(cell.value)
    1-1-3
    for循环嵌套的使用,将列表 temp_list 中的数字逐个打印
    1
    temp_list = [[0, 1, 2], [3, 4, 5], [6, 7, 8]] 2 # 先遍历最外层的列表,取出三个元素 3 for item in temp_list: 4 # 再遍历三个列表,取出其中的元素 5 for number in item: 6 print(number)
     1-2
    获取所有文件路径
    1
    # 导入模块 2 import os 3 # 设置文件夹路径 4 path = './各部门利润表汇总/' 5 # 返回当前目录下所有文件名 6 files = os.listdir(path) 7 # 循环文件名列表 8 for file in files: 9 # 拼接文件路径 10 file_path = path + file 11 # 打印文件路径 12 print(file_path)
     1-2-1
    第一个功能块——打开工作表
    1
    # 导入模块 2 import os 3 # 设置文件夹路径 4 path = './各部门利润表汇总/' 5 # 返回当前目录下所有文件名 6 files = os.listdir(path) 7 # 循环文件名列表 8 for file in files: 9 # 拼接文件路径 10 file_path = path + file 11 # 打开工作簿 12 wb = load_workbook(file_path) 13 # 打开工作表 14 ws = wb.active
     1-2-2
    功能二“调整列宽”
    1
    from openpyxl import load_workbook 2 3 # 打开工作表 4 file_path = './material/事业01部_副本.xlsx' 5 wb = load_workbook(file_path) 6 ws = wb.active 7 8 # 调整列宽 9 ws.column_dimensions['A'].width = 20 10 11 # 保存 12 wb.save(file_path)
     1-2-3
    功能块三——定义单元格样式
    1
    import os 2 from openpyxl import load_workbook 3 from openpyxl.styles import PatternFill, Alignment, Side, Border 4 5 # 定义表头颜色样式为橙色 6 header_fill = PatternFill('solid', fgColor='FF7F24') 7 # 定义表中、表尾颜色样式为淡黄色 8 content_fill = PatternFill('solid', fgColor='FFFFE0') 9 # 定义表尾颜色样式为淡桔红色 10 bottom_fill = PatternFill('solid', fgColor='EE9572) 11 12 # 定义对齐样式横向居中、纵向居中 13 align = Alignment(horizontal='center', vertical='center') 14 15 # 定义边样式为细条 16 side = Side('thin') 17 # 定义表头边框样式,有底边和右边 18 header_border = Border(bottom=side, right=side) 19 # 定义表中、表尾边框样式,有左边 20 content_border = Border(left=side) 21 22 # 设置文件夹路径 23 path = './各部门利润表汇总/' 24 # 返回当前目录下所有文件名 25 files = os.listdir(path) 26 27 # 循环文件名列表 28 for file in file 29 # 拼接文件路径 30 file_path = path + file 31 # 打开工作簿 32 wb = load_workbook(file_path) 33 # 打开工作表 34 ws = wb.active 35 36 # 调整 37 ws.column_dimensions['A'].width = 10 38 ws.column_dimensions['B'].width = 25 39 ws.column_dimensions['C'].width = 50 40 ws.column_dimensions['D'].width = 10 41 ws.column_dimensions['E'].width = 20 42 ws.column_dimensions['F'].width = 15 43 44 # 循环第一行单元格,调整表头样式 45 for cell in ws[1]: 46 # 设置单元格填充颜色 47 cell.fill = header_fill 48 # 设置单元格对齐方式 49 cell.alignment = align 50 # 设置单元格边框 51 cell.border = header_border 52 53 # 获取最后一行行号 54 row_num = ws.max 55 56 # 从第二行开始,循环到倒数第二行 57 for row in ws.iter_rows(min_row=2, max_row=(row_num-1)): 58 # 循环取出单元格,调整表中样式 59 for cell in row: 60 cell.fill = content_fill 61 cell.alignment = align 62 cell.border = content_border 63 64 # 循环最后一行单元格,调整表尾样式 65 for cell in ws[row_num]: 66 cell.fill = bottom_fill 67 cell.alignment = align 68 cell.border = content_border 69 70 # 保存 71 wb.save(file_path)
    首先第 3 行从openpyxl库的styles模块中,导入了4个表示各类别的样式对象。
    1.PatternFill 对象表示填充,可以用于填充颜色。所以第 6、8、10 三行代码分别定义了3种颜色样式;
    2.Alignment 对象表示对齐方式,所以第 13 行代码定义了1种对齐样式;
    3.Border 对象表示边框,所以第 18、20 行代码分别定义了2种边框样式;
    4.第16行代码Side对象是作为Border对象的参数值,它的作用是定义边样式。

    第 46-51 行中的代码,是在设置表头单元格的样式属性。
    将第6行定义好的,颜色样式header_fill赋值给该单元格的填充属性fill,即可完成填充样式的设置。
    这说明,我们在设置具体单元格的样式属性时,用的是赋值修改的方法。
    这种先定义样式再赋值执行,与Excel软件中选好样式工具栏中的具体样式再“点击”修改,倒挺相近的。

    因此,我们在“定义单元格样式”功能块中需要学习的:
    1.是单元格的样式属性(样式工具栏);
    2.是如何定义各样式属性的具体值(工具栏中具体样式)

    1-2-4
    # 从openpyxl库styles模块中导入四个类
    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)
    1-2-5
    # 导入模块
    from openpyxl import load_workbook
    # 打开工作表
    file_path = './material/事业01部_副本.xlsx'
    wb = load_workbook(file_path)
    ws = wb.active
    
    # 打印出第2行到第9行
    for row in ws.iter_rows(min_row=2, max_row=9, values_only=True):
        print(row)
    
    values_only=True,只取数值。
    遍历取出行,是要进行样式修改的,不能只取数值,
    所以使用iter_rows(min_row,max_row),此时values_only默认为False。 有了Sheet.iter_rows(),
    就可以根据其最大行参数值和最小行参数值,确定需要修改的范围了。 如果是其他工作表,表中区域可能就不是从第2
    -第9行了,而是从第2行到倒数第2行。 max_row是工作表Sheet的一个属性,返回的属性值是一个整数。
    这个整数值代表了工作表的最大行数。如果工作表共有9行,那Sheet.max_row 返回的就是整数9。
     1-3-1
    修改“表中”单元格
    表中单元格的样式是:颜色填充为淡黄色;水平和垂直方向都居中;左侧有细框线。
    1
    # 导入模块 2 from openpyxl import load_workbook 3 from openpyxl.styles import PatternFill, Alignment, Side, Border 4 5 # 定义表头颜色样式为橙色 6 header_fill = PatternFill('solid', fgColor='FF7F24') 7 # 定义表中、表尾颜色样式为淡黄色 8 content_fill = PatternFill('solid', fgColor='FFFFE0') 9 # 定义表尾颜色样式为淡桔红色 10 bottom_fill = PatternFill('solid', fgColor='EE9572') 11 12 # 定义对齐样式横向居中、纵向居中 13 align = Alignment(horizontal='center', vertical='center') 14 15 # 定义边样式为细条 16 side = Side('thin') 17 # 定义表头边框样式,有底边和右边 18 header_border = Border(bottom=side, right=side) 19 # 定义表中、表尾边框样式,有左边 20 content_border = Border(left=side) 21 22 # 打开工作表 23 file_path = './material/事业01部_副本.xlsx' 24 wb = load_workbook(file_path) 25 ws = wb.active 26 27 # 获取最后一行行号 28 row_num = ws.max_row 29 30 # 从第二行开始,循环到倒数第二行 31 for row in ws.iter_rows(min_row=2, max_row=row_num-1): 32 # 循环取出单元格,调整表中样式 33 for cell in row: 34 cell.fill = content_fill 35 cell.alignment = align 36 cell.border = content_border
    第28行 是通过获取最大行数Sheet.max_row的方式获取最后一行的行号。
    第31行 取出倒数第二行的行号——rownum-1。
    第34行 是对表中的单元格填充颜色的修改,定义好的样式存储在contentfill中,在第8行,因此用这个变量去赋值。
    第35行 空中是对表中的单元格对齐方式的修改,定义好的样式存储在align中,在第13行。
    第36行 空中是对表中的单元格边框的修改,定义好的样式存储在content_border中,在第20行。
     1-3-2
    修改“表尾”单元格
    表尾单元格的样式是:颜色填充为淡桔红色;水平和垂直方向都居中;左侧有细框线。
    1
    # 导入模块 2 from openpyxl import load_workbook 3 from openpyxl.styles import PatternFill, Alignment, Side, Border 4 5 # 定义表头颜色样式为橙色 6 header_fill = PatternFill('solid', fgColor='FF7F24') 7 # 定义表中、表尾颜色样式为淡黄色 8 content_fill = PatternFill('solid', fgColor='FFFFE0') 9 # 定义表尾颜色样式为淡桔红色 10 bottom_fill = PatternFill('solid', fgColor='EE9572') 11 12 # 定义对齐样式横向居中、纵向居中 13 align = Alignment(horizontal='center', vertical='center') 14 15 # 定义边样式为细条 16 side = Side('thin') 17 # 定义表头边框样式,有底边和右边 18 header_border = Border(bottom=side, right=side) 19 # 定义表中、表尾边框样式,有左边 20 content_border = Border(left=side) 21 22 # 打开工作表 23 file_path = './material/事业01部_副本.xlsx' 24 wb = load_workbook(file_path) 25 ws = wb.active 26 27 # 获取最后一行行号 28 row_num = ws.max_row 29 30 # 遍历最后一行 31 for row in ws[row_num]: 32 # 循环取出单元格,调整表尾样式 33 for cell in row: 34 cell.fill = bottom_fill 35 cell.alignment = align 36 cell.border = content_border
    第28行 是通过获取最大行数Sheet.max_row的方式获取最后一行的行号。
    第31行 是需填写:取出最后一行——ws[rownum]。
    第34行 是对表尾的单元格填充颜色的修改,定义好的样式存储在bottomfill中,在第10行,因此用这个变量去赋值。
    第35行 是对表尾的单元格对齐方式的修改,定义好的样式存储在align中,在第13行。
    第36行 是对表尾的单元格填充颜色的修改,定义好的样式存储在content_border中,在第20行。

  • 相关阅读:
    收集一些网络检测和分析工具
    编程经验分享(转自银总的建议)
    代码着色和windows live writer真好
    pku1063 Flip and Shift严格证明
    So Many Skirt
    一些网址
    c++编写的算24程序
    一道简单的回溯搜索题
    windows程序设计第二章Unicode简介
    字符,字节和编码
  • 原文地址:https://www.cnblogs.com/azxsdcv/p/14082650.html
Copyright © 2020-2023  润新知