news 2026/6/10 11:06:52

python用openpyxl操作excel-合并格式相同的excel文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python用openpyxl操作excel-合并格式相同的excel文件

python用openpyxl操作excel-合并指定路径下格式相同的excel文件,参见如下实列代码

import logging import com.pro001.log.pro_log_config as pro_log_config #参见另一篇博文 from openpyxl import Workbook, load_workbook from openpyxl.styles import Font, Alignment, Side, PatternFill, Border import os import datetime import random import pandas as pd def merge_all_excel(base_dir, output_excel_name): """ 合并指定路径下所有格式即列名名相同的 Excel文件(仅含一或多个sheet)的内容到新的Excel文件中 """ try: if not os.path.exists(base_dir): logger.error(f'路径{base_dir}不存在!') return None suffix = '.xlsx' # 获取当前路径下所有开头为excelFile或myExcel,后缀为 .xlsx 的文件放到列表中 excel_list = [f for f in os.listdir(base_dir) if f.lower().endswith(suffix) \ and (f.startswith('excelFile') or f.startswith('myExcel'))] if not excel_list: logger.error(f'路径{base_dir}下不存在{suffix}的Excel文件!') return None # 创建一个空的列表用于存储所有的DataFrame对象 df_list = [] # 遍历所有Excel文件,读取内容到DataFrame对象中 for excel_file in excel_list: file_path = os.path.join(base_dir, excel_file) '''------每个excel文件仅有一个sheet的情况------''' ''' df = pd.read_excel(file_path) # 合并前增加一列展示数据来源哪个文件 df['来源文件'] = os.path.basename(excel_file) # 合并前删除无效列 df = df.drop(columns=['某列名01','某列名02']) # 删除某多列 #df = df.drop(columns=['某列名01'], axis=1) # 仅删除某列 axis=0为按行,1为按列 # 合并前删除重复行 df = df.drop_duplicates() # 合并前删除空行 df = df.dropna(how='all') # 合并前删除空列,axis=0表示按行删除, axis=1表示按列删除, how='all'表示删除所有空行 df = df.dropna(how='all', axis=1) # 合并前删除重复列 df = df.loc[:, ~df.columns.duplicated()] if df: df_list.append(df) logger.info(f'文件{file_path}读取成功,包含{len(df)}行数据!') else: logger.error(f'文件{file_path}读取返回无效数据') ''' ''' -----每个 excel 文件有一或多个数据格式相同 sheet 的情况,兼容上面仅有一个sheet的情况-----''' xlsx_file = pd.ExcelFile(file_path) for sheet_name in xlsx_file.sheet_names: tmp_df = xlsx_file.parse(sheet_name) tmp_df['来源文件'] = os.path.basename(excel_file) tmp_df['来源sheet'] = sheet_name # 合并前删除无效列,删除空行,去重等操作 tmp_df = tmp_df.drop(columns=['某列名01','某列名02']) # 删除某多列 #tmp_df = tmp_df.drop(columns=['某列名01'], axis=1) # 仅删除某列 axis=0为按行,1为按列 tmp_df = tmp_df.drop_duplicates() tmp_df = tmp_df.dropna(how='all') tmp_df = tmp_df.dropna(how='all', axis=1) tmp_df = tmp_df.loc[:, ~tmp_df.columns.duplicated()] if tmp_df: df_list.append(tmp_df) logger.info(f'文件{file_path}的{sheet_name}工作表读取成功,包含{len(tmp_df)}行数据!') else: logger.error(f'文件{file_path}的{sheet_name}工作表读取返回无效数据') # 判断是否有有效的合并sheet数据文件 if not df_list: logger.error(f'没有有效的合并sheet数据文件!') return None # 生成新的Excel文件名称 new_excel_name ='' if not output_excel_name or not output_excel_name.lower().endswith(suffix): new_excel_name = datetime.datetime.now().strftime('%Y%m%d_%H%M%S') + suffix new_excel_name = 'F' + new_excel_name new_excel_name = os.path.join(base_dir, new_excel_name) # 合并所有 df 对象,忽略前面的索引列 merged_df = pd.concat(df_list, ignore_index=True) # 合并后的内容写入到新的 Excel 文件中 merged_df.to_excel(new_excel_name, index=False) # 保存合并后的结果到新的Excel文件中 logger.info(f'合并后的Excel文件见:{new_excel_name}') return new_excel_name except Exception as e: logger.error(f'合并excel异常文件,info: \n{e}') return None def main(): """主函数""" base_dir = r'F:\appData\tempExcel' merge_all_excel(base_dir, 'mergeExcelFile01.xlsx') if __name__ == '__main__': print('-' * 60) main()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 20:52:42

小红书内容运营工具怎么选?专业视角拆解优质工具核心标准

在小红书成为品牌 “种草主阵地” 的当下,内容运营的效率与质量直接决定品牌曝光与转化效果。但多数品牌面临 “优质内容产出慢、关键词适配差、数据优化无依据” 等痛点,单纯依赖人工运营已难以应对平台高频更新与用户精细化需求。而一款好用的小红书内…

作者头像 李华
网站建设 2026/6/10 9:42:59

Cesium快速入门到精通系列教程二十二:Cesium1.95中设置颜色的方式

一、基础颜色定义方式Cesium 中最核心的颜色类是 Cesium.Color,所有可视化元素(模型、几何体、材质、标签等)的颜色最终都依赖此类定义,主要有以下初始化方式:1. 预定义纯色(直接调用内置常量)C…

作者头像 李华
网站建设 2026/6/10 15:33:35

C++学习之旅【实战全面解析C++类和对象】

🔥承渊政道:个人主页 ❄️个人专栏: 《C语言基础语法知识》 《数据结构与算法初阶》《C初阶知识内容》 ✨逆境不吐心中苦,顺境不忘来时路! 🎬 博主简介: 引言:前篇文章,小编已经将我所学的C类和对象的相关知识介绍完了,俗话说的好,温故知新,…

作者头像 李华
网站建设 2026/6/9 21:29:57

如何一键生成文件二维码?文件二维码在线制作指南

日常工作和生活中,我们常常需要分享各类文件 —— 合同文档、课件资料、设计素材等,传统的文件传输方式要么受大小限制,要么操作繁琐。其实,给文件生成二维码,扫码即可直接下载或查看,无需复杂步骤&#xf…

作者头像 李华
网站建设 2026/6/10 13:33:01

软件工程正是为了应对“软件危机”而诞生的学科,其核心目标是通过系统化

软件工程正是为了应对“软件危机”而诞生的学科,其核心目标是通过系统化、规范化和可量化的方法来提高软件开发的效率与质量。面对第三代计算机硬件快速发展所带来的软件需求激增,传统的手工作坊式开发方式已无法满足复杂系统的构建需求,从而…

作者头像 李华
网站建设 2026/6/10 12:07:45

21、Ubuntu 软件安装、卸载与系统维护全攻略

Ubuntu 软件安装、卸载与系统维护全攻略 在 Ubuntu 系统中,软件的安装与卸载以及系统的维护和安全保障是日常使用中非常重要的环节。下面将详细介绍多种软件管理方式以及系统维护的相关内容。 1. Synaptic 软件包管理器 Synaptic 除了有用于显示类别和安装状态的“Sections…

作者头像 李华