虽然用VBA也可以实现“将多个/不同Excel工作簿中的/多个表格/按不同工作表名称/汇总合并在同一个Excel工作簿中 ”,但是如果数据量过大,VBA用起来就会卡。因为Python可以处理的数据量比较大都不会卡,所以我就喜欢用Python来操作。
示例一:
在 C:\Users\QDM\Desktop\Python 路径下有3个工作簿,它们的数据结构相同,且都位于 Sheet1中。如以下截图所示:
然后,通过以下这段Python代码,可以实现如下效果:
# 导库
import pandas as pd
import os
# 将待合并的文件都放到同一个文件夹内,文件夹和路径尽量避免包含中文字符
os.chdir(r"C:\Users\QDM\Desktop\Python")
# 将要汇总的工作表名称写入列表中
sheetname = ["Sheet1"]
with pd.ExcelWriter(r"C:\Users\QDM\Desktop\Python\汇总.xlsx") as writer:
for sheet in sheetname:
df = pd.concat([pd.read_excel(file,sheet_name = sheet) for file in os.listdir() if file.endswith(".xlsx")])
df.to_excel(writer,sheet_name = sheet)
示例二:
在 C:\Users\QDM\Desktop\Python\new 路径下,有3个工作簿,每个工作簿中包含不止一张工作表,现在要精确地按照它们的sheet_name来分类合并汇总到同一个工作簿,以原有sheet_name来命名的不同工作表中。
可通过这段示例代码来实现:
# 导库
import pandas as pd
import os
# 将待合并的文件都放到同一个文件夹内,文件夹和路径尽量避免包含中文字符
os.chdir(r"C:\Users\QDM\Desktop\Python\new")
# 将要汇总的工作表名称写入列表中
sheetname = ["Sheet1","Sheet2"]
with pd.ExcelWriter(r"C:\Users\QDM\Desktop\Python\new\汇总.xlsx") as writer:
for sheet in sheetname:
df = pd.concat([pd.read_excel(file,sheet_name = sheet) for file in os.listdir() if file.endswith(".xlsx")])
df.to_excel(writer,sheet_name = sheet)
效果如下:
温馨提示:在修改运行上述代码前,请记得关闭待合并的所有工作簿,否则会报错,合并出来的新工作簿里面也会是一片空白!
来源:oschina
链接:https://my.oschina.net/u/3750423/blog/4302523