项目场景:
遇到需要多个excel工作簿、多sheet工作进行合并,但又不想买WPS会员和VBA,就可以借助python进行一个简单的程序编写从而解决。
问题描述
将以上三个工作簿,及其对应工作表表进行对应合并。
所需要的第三方库:
import pandas as pd
import xlrd
import os
import xlwt
代码:
# 确定文件路径
path="合并工作表\\"
xlsx_names = [x for x in os.listdir(path) if x.endswith(".xlsx")]
# print(xlsx_names)
# 获取工作簿名称
xlsx_names1 = xlsx_names[0]
aa = path + xlsx_names1
# print(xlsx_names1)
# print(aa)
# first_file_fh = pd.read_excel(aa,engine='openpyxl')
# print(first_file_fh)
first_file_fh=xlrd.open_workbook(aa)
# 获取工作表名称
sheet_names=pd.ExcelFile(aa).sheet_names
# print(first_file_sheet)
# 无需合并的sheet名称
no_conbat = ["无需合并"]
# 加载writer
writer=pd.ExcelWriter("合并成功文件.xlsx")
# 循环合并
for sheet_name in sheet_names:
# print(sheet_name)
df = None
# 按EXCEL名循环
for xlsx_name in xlsx_names:
num=0
sheet_na = pd.ExcelFile(path + xlsx_name).sheet_names
# print("sheet_na:",sheet_na)
if sheet_name in sheet_na:
if sheet_name in no_conbat and num!=0:
continue
_df = pd.read_excel(path + xlsx_name, sheet_name=sheet_name,header=0)
# print(df)
if df is None:
df = _df
else:
df = pd.concat([df, _df], ignore_index=True)
else:continue
# print(df)
df.to_excel(excel_writer=writer, sheet_name=sheet_name,index=False)
print(sheet_name + " 保存成功!共%d个,第%d个。" % (len(sheet_names),num))
num+= 1
writer.save()
writer.close()
结果展示:
代码运行结束后会自动生成“合并成功文件.xlsx”
合并成功