python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python合并工作表

Python批量合并365个工作表

作者:PythonFun

这篇文章主要为大家详细介绍了Python批量合并365个工作表的2种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

一、引言

小明刚进入到新公司,就被委以重任:将365个Excel文件中的英文表头修改为中文。传统方法是逐一打开每个文件,手动修改标题,然后保存,最后再合并。这种方法不仅耗时耗力,还容易出错。如果用Python就可以实现批量修改表头,并快速合并,就可以大大地提速,这样原本可能需要2天的工作量,可能只需要1分钟就完成了。那么用Python又是如何实现的呢?

二、实现代码

1. 使用pandas来合并

如果使用Python中的pandas的话,根据他的需求可以分为3步:

第一步:读取所有xlsx文件,这时我们使用的是os模块,利用os模块批量获取xlsx格式文件,由于有时还会有~.xlsx这种文件,干扰python读取文件,所以要排除一下。

第二步:利用pandas模块建立一个DataFrame,设定好表头columns,后面合并xlsx时就不用读取第一行表头,直接进行合并了。

第三步:利用for循环,拼接路径地址,逐个读取xlsx文件,修改表头后,再利用pandas中的concat来合并xlsx文件,合完成后输出保存。

通过以上三步,就可以将 365 个xlsx文件合并成一个,合并后的excel表头按要求的中文来。只需编写10多行代码,他就可以在 2秒内完成这项工作,而不是花费24小时。

import os
import pandas as pd
import time
 
t1 = time.time() #定义时间
# 定义文件夹路径
folder_path = "./files/"
 
# 获取文件夹中所有Excel文件的文件名
file_list = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') and not f.startswith("~")]
 
# 初始化一个空的DataFrame,用于存放合并后的数据
combined_df = pd.DataFrame(columns=['标题', '日期', '检查结果', '核检员'])
 
# 遍历所有Excel文件,并将它们合并到一个DataFrame中
for file_name in file_list:
    file_path = os.path.join(folder_path, file_name)
    df = pd.read_excel(file_path)
    # 将列名改为所需的表头
    df.columns = ['标题', '日期', '检查结果', '核检员']
    # 将当前文件的内容追加到合并的DataFrame中
    combined_df = pd.concat([combined_df, df], ignore_index=True)
 
# 保存合并后的数据到一个新的Excel文件
output_file = "combined_quality_report.xlsx"
combined_df.to_excel(output_file, index=False)
 
print(f"所有文件已成功合并,并保存为 {output_file},\n耗时:{round(time.time()-t1, 1)}秒")

2.使用openpyxl来合并

由于pandas在打包时不太方便,因此为了跨平台操作,我们可以把它改为openpyxl,当然我们可以不用手工去改,只把上面这些代码放到ChatGPT中,给出指令就可以了。

在使用openpyxl时,我们修改代码的逻辑,直接从第二行来读取,简化读取步骤,而不用更新读取excel的表头了,这样可以保证其生成的速度还可以提高不少。步骤如下:

第一步,使用 openpyxl 创建一个新的工作簿。

第二步,读取每个文件的内容并跳过表头,只合并数据行。

第三步,最后将合并的数据保存到一个新的Excel文件中。

实现的代码如下:

import os
import time
from openpyxl import Workbook,load_workbook
 
# 定义时间
t1 = time.time()
 
# 定义文件夹路径
folder_path = "./files/"
 
# 获取文件夹中所有Excel文件的文件名
file_list = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') and not f.startswith("~")]
 
# 创建一个新的工作簿和活动工作表
combined_wb = Workbook()
combined_ws = combined_wb.active
 
# 添加表头
headers = ['标题', '日期', '检查结果', '核检员']
combined_ws.append(headers)
 
# 遍历所有Excel文件,并将它们合并到新的工作表中
for file_name in file_list:
    file_path = os.path.join(folder_path, file_name)
    wb = load_workbook(file_path)
    ws = wb.active
    
    # 跳过表头,从第二行开始读取数据
    for row in ws.iter_rows(min_row=2, values_only=True):
        combined_ws.append(row)  # 将每一行数据添加到合并的工作表中
 
# 保存合并后的数据到一个新的Excel文件
output_file = "combined_quality_report.xlsx"
combined_wb.save(output_file)
 
print(f"所有文件已成功合并,并保存为 {output_file},\n耗时:{round(time.time() - t1, 1)}秒")

三、学后总结

在数字化办公时代,掌握编程和自动化技能对提升工作效率至关重要。Python作为一种易学且功能强大的编程语言,在处理重复性工作时展现出巨大潜力。如果你也想摆脱繁重的重复劳动,不妨尝试学习Python编程,让你的办公效率直线上升。

到此这篇关于Python批量合并365个工作表的文章就介绍到这了,更多相关Python合并工作表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文