网站建设开发简介购物网站建设哪家好
2026/3/29 13:56:29 网站建设 项目流程
网站建设开发简介,购物网站建设哪家好,做网站iiwok,wordpress 七牛云 sslExcel文件合并大法#xff1a;零基础也能一键搞定多表合并#xff01;当你的文件夹里堆满了结构相似的Excel表格#xff0c;而领导只要一份汇总报告时#xff0c;你是不是还在手动复制粘贴#xff1f;今天#xff0c;让我带你走进自动化办公的魔法世界#xff01;一、引…Excel文件合并大法零基础也能一键搞定多表合并当你的文件夹里堆满了结构相似的Excel表格而领导只要一份汇总报告时你是不是还在手动复制粘贴今天让我带你走进自动化办公的魔法世界一、引言每个Excel用户的痛点上周小王又加班到晚上9点。市场部发来20个分店的销售数据每个分店一个Excel文件表头“看起来”都一样但实际操作时发现有的文件多了“优惠券”列有的少了“客户评分”列。他一边手动复制粘贴一边核对表头眼睛都看花了结果还是漏了一个分店的数据…如果你也有过类似的经历那么恭喜你今天就是解放双手的日子我将手把手教你用Python写一个智能的Excel合并脚本让重复劳动成为历史二、准备工作安装必要的魔法工具2.1 为什么选择PythonPython就像是办公自动化的瑞士军刀简单易学功能强大。即使你是编程小白跟着我的步骤也能轻松上手2.2 安装Python首先确认你的电脑是否安装了PythonWindows用户按下Win R键输入cmd回车输入python --version如果显示版本号如Python 3.8.5恭喜你已安装如果没安装怎么办去Python官网https://www.python.org/downloads/下载最新版本安装时记得勾选Add Python to PATH2.3 安装必要的库我们的脚本需要两个强大的库pandas数据分析的超人openpyxl处理Excel的专业助手安装方法超级简单pipinstallpandas openpyxl如果遇到网络问题可以使用国内镜像pipinstallpandas openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple三、脚本详解一行行代码的奥秘3.1 整体思路先理解再写代码想象一下你要整理一堆卡片每张卡片都有姓名、电话、地址等信息但有些卡片多了邮箱有些少了地址。你会怎么整理找第一张卡片作为模板逐张对比和模板一样的就收起来不一样的放一边记录哪些卡片被跳过了为什么把所有合格的卡片按模板顺序叠在一起我们的脚本就是这个思路的自动化版本3.2 完整代码附详细注释 Excel智能合并工具 - 带表头检测功能 作者你的办公自动化助手 日期2023年 importpandasaspd# 数据处理的核心库importos# 操作系统相关功能importglob# 文件查找工具fromdatetimeimportdatetime# 时间处理importsys# 系统相关defmerge_excel_files(folder_path,output_file合并结果.xlsx,log_file合并日志.txt): 合并指定文件夹下的所有Excel文件 参数说明: folder_path: 要处理的文件夹路径比如 C:/销售数据 output_file: 输出文件名默认为合并结果.xlsx log_file: 日志文件名记录处理过程默认为合并日志.txt # 创建日志记录器 - 相当于我们的小秘书deflog_message(message,levelINFO):# 添加时间戳让日志更清晰timestampdatetime.now().strftime(%Y-%m-%d %H:%M:%S)log_entryf[{timestamp}] [{level}]{message}# 双重记录既显示在屏幕又保存到文件print(log_entry)# 在屏幕上显示# 写入日志文件withopen(log_file,a,encodingutf-8)asf:f.write(log_entry\n)# 清空日志文件开始新记录withopen(log_file,w,encodingutf-8)asf:f.write(fExcel文件合并日志 - 开始时间:{datetime.now().strftime(%Y-%m-%d %H:%M:%S)}\n)f.write(*80\n)log_message(f开始合并文件夹:{folder_path})log_message(f输出文件:{output_file})log_message(正在搜索Excel文件...)# 第一步查找所有Excel文件# 支持多种Excel格式就像搜索*.doc能找所有Word文档一样excel_patterns[*.xlsx,*.xls,*.xlsm,*.xlsb]excel_files[]# 用来存放找到的文件路径forpatterninexcel_patterns:# glob.glob就像是文件搜索器pattern是搜索条件excel_files.extend(glob.glob(os.path.join(folder_path,pattern)))# 检查是否找到了文件ifnotexcel_files:log_message(未找到任何Excel文件请检查文件夹路径,WARNING)print(\n 提示)print(1. 检查路径是否正确)print(2. 确认文件夹中有Excel文件)print(3. 支持的格式.xlsx, .xls, .xlsm, .xlsb)return# 如果没有文件就结束运行log_message(f 找到{len(excel_files)}个Excel文件)print(找到的文件列表)fori,fileinenumerate(excel_files,1):print(f{i}.{os.path.basename(file)})# 第二步读取第一个文件作为标准模板first_fileexcel_files[0]log_message(f\n 选择第一个文件作为基准:{os.path.basename(first_file)})try:# 使用pandas读取Excel就像你用Excel打开文件一样first_dfpd.read_excel(first_file)# 获取表头第一行的内容base_columnslist(first_df.columns)log_message(f基准表头包含{len(base_columns)}列:{base_columns})# 存储所有有效的数据all_data[first_df]# 先把第一个文件的数据放进去processed_files[os.path.basename(first_file)]# 记录成功处理的文件skipped_files[]# 记录被跳过的文件# 第三步逐个处理其他文件log_message(\n*60)log_message(开始逐个处理文件...)log_message(*60)fori,file_pathinenumerate(excel_files[1:],2):filenameos.path.basename(file_path)log_message(f\n 处理第{i}个文件:{filename})try:# 读取当前文件dfpd.read_excel(file_path)current_columnslist(df.columns)# 关键步骤比较表头# 我们用集合(set)来比较因为集合不关心顺序ifset(current_columns)!set(base_columns):log_message(❌ 表头不一致跳过此文件,WARNING)# 详细分析哪里不一样missing_colsset(base_columns)-set(current_columns)extra_colsset(current_columns)-set(base_columns)ifmissing_cols:log_message(f 缺少的列:{missing_cols},WARNING)ifextra_cols:log_message(f 多出的列:{extra_cols},WARNING)# 记录跳过的文件信息skipped_files.append({filename:filename,missing_cols:list(missing_cols),extra_cols:list(extra_cols)})continue# 跳过这个文件继续下一个# 表头一致按照基准顺序重新排列列# 这就像整理书架按照固定顺序摆放书籍dfdf[base_columns]all_data.append(df)processed_files.append(filename)log_message(f✅ 文件处理成功包含{len(df)}行数据)exceptExceptionase:# 如果文件损坏或格式错误捕获异常log_message(f⚠️ 处理文件时出错:{str(e)},ERROR)skipped_files.append({filename:filename,error:str(e)})# 第四步合并所有数据iflen(all_data)0:log_message(f\n 开始合并数据共{len(all_data)}个文件)# pd.concat就像用胶水把所有表格粘在一起merged_dfpd.concat(all_data,ignore_indexTrue)# 保存到Excelmerged_df.to_excel(output_file,indexFalse)log_message(f 合并完成! 总行数:{len(merged_df)})log_message(f 结果已保存到:{output_file})# 第五步生成漂亮的汇总报告generate_summary_report(processed_files,skipped_files,len(merged_df),log_message)else:log_message( 没有成功读取任何文件请检查文件格式,ERROR)exceptExceptionase:log_message(f 处理基准文件时出错:{str(e)},ERROR)print(\n可能的原因)print(1. 文件正在被其他程序打开)print(2. 文件损坏)print(3. 文件受密码保护)defgenerate_summary_report(processed_files,skipped_files,total_rows,log_func):生成漂亮的汇总报告log_func(\n*80)log_func( 合并汇总报告)log_func(*80)log_func(f✅ 成功合并的文件数量:{len(processed_files)})log_func(f⏭️ 跳过的文件数量:{len(skipped_files)})log_func(f 合并后的总行数:{total_rows})ifprocessed_files:log_func(\n 成功合并的文件列表:)fori,filenameinenumerate(processed_files,1):log_func(f{i}.{filename})ifskipped_files:log_func(\n⚠️ 跳过的文件列表:)fori,skip_infoinenumerate(skipped_files,1):log_func(f{i}. 文件:{skip_info[filename]})ifmissing_colsinskip_infoandskip_info[missing_cols]:log_func(f 缺少的列:{skip_info[missing_cols]})ifextra_colsinskip_infoandskip_info[extra_cols]:log_func(f 多出的列:{skip_info[extra_cols]})iferrorinskip_info:log_func(f 错误信息:{skip_info[error]})log_func(\n*80)log_func(✨ 处理完成建议检查合并结果文件)log_func(*80)# 主程序 - 程序的入口点defmain():主函数程序的起点print(*50)print( Excel智能合并工具 v1.0)print(*50)# 获取用户输入iflen(sys.argv)1:# 如果通过命令行参数传入路径直接使用folder_pathsys.argv[1]else:# 否则提示用户输入print(\n 请输入要处理的文件夹路径可直接拖拽文件夹到这里:)folder_pathinput( ).strip().strip()# 检查文件夹是否存在ifnotos.path.exists(folder_path):print(f\n❌ 错误: 文件夹 {folder_path} 不存在)print(请检查路径是否正确)returnifnotos.path.isdir(folder_path):print(f\n❌ 错误: {folder_path} 不是一个文件夹)print(请确保输入的是文件夹路径而不是文件路径)return# 询问输出文件名print(\n 请输入输出文件名直接回车使用默认名称:)output_fileinput( 默认[合并结果.xlsx]: ).strip()ifnotoutput_file:output_file合并结果.xlsx# 询问日志文件名print(\n 请输入日志文件名直接回车使用默认名称:)log_fileinput( 默认[合并日志.txt]: ).strip()ifnotlog_file:log_file合并日志.txtprint(\n*50)print(开始处理...)print(*50\n)# 执行合并merge_excel_files(folder_path,output_file,log_file)print(\n*50)print(✅ 处理完成!)print(f 合并结果:{output_file})print(f 详细日志:{log_file})print(*50)# 程序的起点if__name____main__:main()四、使用教程三种方式任你选4.1 方式一拖拽文件夹最简单将上面的代码保存为merge_excel.py把要处理的文件夹拖到merge_excel.py文件上按照提示操作即可4.2 方式二命令行运行# 基本用法python merge_excel.pyC:\销售数据# 指定输出文件名python merge_excel.pyC:\销售数据2023年销售汇总.xlsx4.3 方式三交互式运行直接双击merge_excel.py然后按照提示操作 Excel智能合并工具 v1.0 请输入要处理的文件夹路径可直接拖拽文件夹到这里: C:\Users\小王\Desktop\销售数据 请输入输出文件名直接回车使用默认名称: 默认[合并结果.xlsx]: 年度销售汇总.xlsx 请输入日志文件名直接回车使用默认名称: 默认[合并日志.txt]: 2023年合并日志.txt五、实际案例小王的逆袭让我们回到开头的故事看看小王是如何用我们的脚本逆袭的原来需要打开20个Excel文件逐个复制粘贴核对表头差异整理格式耗时3小时现在使用脚本把20个文件放在一个文件夹运行脚本喝杯咖啡等待耗时3分钟处理过程示例 Excel智能合并工具 v1.0 请输入要处理的文件夹路径: C:\销售数据\各分店 找到 20 个Excel文件 选择第一个文件作为基准: 北京分店.xlsx 基准表头包含 6 列: [日期, 产品, 数量, 单价, 金额, 销售员] 处理第 2 个文件: 上海分店.xlsx ✅ 文件处理成功包含 150 行数据 处理第 3 个文件: 广州分店.xlsx ❌ 表头不一致跳过此文件 缺少的列: {销售员} 多出的列: {客户评分} ...中间省略... 开始合并数据共 18 个文件 合并完成! 总行数: 2850 结果已保存到: 年度销售汇总.xlsx 合并汇总报告 ✅ 成功合并的文件数量: 18 ⏭️ 跳过的文件数量: 2 合并后的总行数: 2850 ⚠️ 跳过的文件列表: 1. 文件: 广州分店.xlsx 缺少的列: [销售员] 多出的列: [客户评分] 2. 文件: 深圳分店.xlsx 错误信息: File is not a zip file小王不仅快速完成了任务还通过日志清楚地知道哪些文件被跳过了为什么被跳过最终合并了多少数据六、核心功能详解6.1 智能表头检测脚本的灵魂# 关键代码解析ifset(current_columns)!set(base_columns):# 找出具体差异missing_colsset(base_columns)-set(current_columns)extra_colsset(current_columns)-set(base_columns)为什么要用集合(set)集合不关心顺序{A,B,C}和{C,B,A}是相等的可以快速做差集运算找出差异6.2 详细的日志系统脚本的日志系统就像飞机的黑匣子记录了时间戳每个操作的具体时间处理状态成功/失败/警告详细原因为什么失败缺少什么列最终统计汇总报告6.3 错误处理机制try:dfpd.read_excel(file_path)# 正常处理exceptExceptionase:log_message(f处理文件时出错:{str(e)},ERROR)这就像是给脚本戴上了安全帽即使遇到问题也不会崩溃而是记录错误继续运行。七、常见问题解答Q1: 我的Excel文件有多个工作表怎么办A: 脚本默认读取第一个工作表。如果需要读取特定工作表可以修改读取代码# 读取名为Sheet1的工作表dfpd.read_excel(file_path,sheet_nameSheet1)Q2: 我想合并特定列不是全部列怎么办A: 在基准文件读取后可以指定需要的列# 只保留需要的列needed_columns[日期,产品,数量,金额]base_columns[colforcolinfirst_df.columnsifcolinneeded_columns]Q3: 文件太大合并后Excel打不开怎么办A: 可以考虑分块处理或保存为CSV# 保存为CSV支持更大数据量merged_df.to_csv(合并结果.csv,indexFalse,encodingutf-8-sig)Q4: 我想合并文件夹及其子文件夹的所有Excel怎么办A: 使用递归查找importosdeffind_excel_files(root_folder):excel_files[]forroot,dirs,filesinos.walk(root_folder):forfileinfiles:iffile.endswith((.xlsx,.xls,.xlsm)):excel_files.append(os.path.join(root,file))returnexcel_files八、扩展功能让脚本更强大8.1 添加进度条fromtqdmimporttqdm# 在循环处理文件时添加进度条fori,file_pathinenumerate(tqdm(excel_files[1:]),2):# 处理代码安装tqdmpip install tqdm8.2 支持多种编码格式# 尝试多种编码方式读取CSVencodings[utf-8,gbk,gb2312,latin1]forencodinginencodings:try:dfpd.read_excel(file_path,encodingencoding)breakexcept:continue8.3 自动备份原文件importshutilimporttimedefbackup_files(folder_path):backup_namef备份_{time.strftime(%Y%m%d_%H%M%S)}backup_pathos.path.join(os.path.dirname(folder_path),backup_name)shutil.copytree(folder_path,backup_path)returnbackup_path九、总结与展望通过这个脚本你不仅学会了如何合并Excel更重要的是掌握了自动化思维识别重复劳动什么工作让你频繁复制粘贴设计解决方案用代码模拟你的操作步骤实现自动化让机器替你完成枯燥工作添加容错机制处理各种意外情况未来的学习方向学习pandas更多功能数据清洗、分析尝试用Python自动发送邮件报告学习制作简单的图形界面GUI将脚本部署为Web服务记住编程不是目的而是工具。真正的目标是提高效率解放时间让你可以专注于更有价值的工作。最后的小彩蛋如果你觉得命令行不够酷可以尝试给脚本加个图形界面这里有个超简单的版本importtkinterastkfromtkinterimportfiledialog,messageboximportpandasaspdclassExcelMergerGUI:def__init__(self):self.windowtk.Tk()self.window.title(Excel合并工具)# 创建界面元素tk.Button(self.window,text选择文件夹,commandself.select_folder).pack()tk.Button(self.window,text开始合并,commandself.merge).pack()self.window.mainloop()defselect_folder(self):folderfiledialog.askdirectory()print(f选择了文件夹:{folder})defmerge(self):messagebox.showinfo(提示,合并完成)# 运行GUI版本if__name____main__:ExcelMergerGUI()希望这篇教程能帮到你如果有任何问题欢迎随时交流。祝你早日成为办公自动化高手

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询