文章目录
需求描述解决思路执行步骤键盘输入并保存待处理/输出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)