300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Python使用openpyxl模块小批量处理Excel文件

Python使用openpyxl模块小批量处理Excel文件

时间:2020-09-15 04:04:33

相关推荐

Python使用openpyxl模块小批量处理Excel文件

文章目录

需求描述解决思路执行步骤键盘输入并保存待处理/输出excel目录定义常量--待处理的工作表名,导出的工作簿名输出excel目录下创建新工作簿遍历待处理excel目录下的所有工作簿分析报告 完整代码

需求描述

Excel导出并处理数据:

1、多个Excel工作簿待处理

2、Excel工作簿中的多个工作表待处理

3、Excel工作表的多个数据待处理

解决思路

键盘输入并保存待处理excel目录excel输出目录

在excel输出目录下创建新工作簿,修改表内行列名,返回输出目录+新建工作簿名的完整路径

遍历待处理excel目录下的所有工作簿,同时判断遍历的工作簿是否存在需要处理的工作表,如果需要,接5;不需要,接4

退出

将遍历到的当前工作簿中待处理表的数据进行处理存入新建的工作簿的工作表中,直到遍历完全部工作簿,退出

执行步骤

键盘输入并保存待处理/输出excel目录

file_dir = input("输入待处理excel目录:")file_new_dir = input("输入excel输出目录:")

定义常量–待处理的工作表名,导出的工作簿名

# 待处理工作表名OVERVIEW_TABLE_NAME = '测试概况总览'# 导出工作簿名=自定义excel名+年月日时分秒RESULT_FILE_PREFIX = '测试报告汇总'RESULT_FILE_NAME = '{}_{}.xlsx'.format(RESULT_FILE_PREFIX, datetime.datetime.now().strftime('%Y%m%d%H%M%S'))

输出excel目录下创建新工作簿

在excel输出目录下创建新工作簿,修改表内行列名,返回输出目录+新建工作簿名的完整目标文件路径

def create_report_file(target_path):""":param target_path: 目标路径:return: 目标文件路径"""# 设置item为全局变量,初始化为1global item# 拼接路径=输出excel路径+自定义的输出excel名称target_file_path = os.path.join(target_path, RESULT_FILE_NAME)# 判断当前输出路径下是否已存在要创建的新工作簿if not os.path.exists(target_file_path):# 创建一个新工作簿workbook = openpyxl.Workbook()# 获取到活动表sheet = workbook.active# 设置表名,不设置默认“sheet”sheet.title = '总览'# 设置表第一行四个单元格填入内容sheet[f'A{item}'] = '名称'sheet[f'B{item}'] = '系统类别'sheet[f'C{item}'] = '设备组'sheet[f'D{item}'] = '综合通过率'# 将内容写入文件workbook.save(target_file_path)item = item + 1return target_file_path

遍历待处理excel目录下的所有工作簿

遍历待处理excel目录下的所有工作簿,同时判断遍历的工作簿是否存在需要处理的工作表

def resolve_files(source_path, target_file_path):""":param source_path: 来源路径:param target_file_path: 目标报告路径:return: null"""# 遍历路径下所有文件for file in os.listdir(source_path):# 判断该工作簿中是否存在要处理的工作表if RESULT_FILE_PREFIX not in file:print(file)# 如果存在,则进行处理analyze_report(os.path.join(source_path, file), target_file_path)

分析报告

def analyze_report(files, target_file_path):""":param files: 原始报告文件:param target_file_path: 目标文件路径:return:"""global item# 打开名为files值的已存在的工作簿workbook = openpyxl.load_workbook(files)try:# 获取名为OVERVIEW_TABLE_NAME值的工作表sheet = workbook[OVERVIEW_TABLE_NAME]# 设置一个字典,将想要处理的数据放入字典一一对应result = {'package_name': sheet['C2'].value,'os_type': sheet['C4'].value,'group_type': sheet['E4'].value.upper(),'passing_rate': sheet['A7'].value,}print("录入内容读出:{}".format(result)) # 输出测试# 打开刚刚创建的新工作簿workbook = openpyxl.load_workbook(target_file_path)sheet = workbook.active# 将字典中的数据一一填入单元格sheet[f'A{item}'] = result['package_name']sheet[f'B{item}'] = result['os_type']sheet[f'C{item}'] = result['group_type']sheet[f'D{item}'] = result['passing_rate']item = item + 1workbook.save(target_file_path)workbook.close()except KeyError as e:print(f'[{files}] - Sheet名未找到')

完整代码

import datetimeimport osimport openpyxlitem = 1# 待处理工作表名OVERVIEW_TABLE_NAME = '测试概况总览'# 导出工作簿RESULT_FILE_PREFIX = '测试报告汇总'RESULT_FILE_NAME = '{}_{}.xlsx'.format(RESULT_FILE_PREFIX, datetime.datetime.now().strftime('%Y%m%d%H%M%S'))def analyze_report(files, target_file_path):"""分析报告:param files: 原始报告文件:param target_file_path: 目标文件路径:return:"""global itemworkbook = openpyxl.load_workbook(files) # 返回一个workbook数据类型的值try:sheet = workbook[OVERVIEW_TABLE_NAME] # 获取活动表result = {'package_name': sheet['C2'].value,'os_type': sheet['C4'].value,'group_type': sheet['E4'].value.upper(),'passing_rate': sheet['A7'].value,}print("录入内容读出:{}".format(result)) # 输出workbook = openpyxl.load_workbook(target_file_path)sheet = workbook.activesheet[f'A{item}'] = result['package_name']sheet[f'B{item}'] = result['os_type']sheet[f'C{item}'] = result['group_type']sheet[f'D{item}'] = result['passing_rate']item = item + 1workbook.save(target_file_path)workbook.close()except KeyError as e:print(f'[{files}] - Sheet名未找到')def resolve_files(source_path, target_file_path):"""处理文件:param source_path: 来源路径:param target_file_path: 目标报告路径:return:"""for file in os.listdir(source_path):if RESULT_FILE_PREFIX not in file:print(file)analyze_report(os.path.join(source_path, file), target_file_path)def create_report_file(target_path):"""创建新的文件:param target_path: 目标路径:return: 目标文件路径"""global itemtarget_file_path = os.path.join(target_path, RESULT_FILE_NAME)if not os.path.exists(target_file_path):workbook = openpyxl.Workbook()sheet = workbook.activesheet.title = '总览'sheet[f'A{item}'] = '名称'sheet[f'B{item}'] = '系统类别'sheet[f'C{item}'] = '设备组'sheet[f'D{item}'] = '综合通过率'workbook.save(target_file_path)item = item + 1return target_file_pathif __name__ == '__main__':file_dir = input("输入待处理excel目录:")file_new_dir = input("输入excel输出目录:")target_file_path = create_report_file(file_new_dir)resolve_files(file_dir, target_file_path)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。