项目场景:
遇到需要多个excel工作簿、多sheet工作进行合并,但又不想买WPS会员和VBA,就可以借助python进行一个简单的程序编写从而解决。
问题描述
将以上三个工作簿,及其对应工作表表进行对应合并。
所需要的第三方库:
importpandasaspd
importxlrd
importos
importxlwt
代码:
#确定文件路径
path="合并工作表\\"
xlsx_names=[xforxinos.listdir(path)ifx.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")
#循环合并
forsheet_nameinsheet_names:
#print(sheet_name)
df=None
#按EXCEL名循环
forxlsx_nameinxlsx_names:
num=0
sheet_na=pd.ExcelFile(path+xlsx_name).sheet_names
#print("sheet_na:",sheet_na)
ifsheet_nameinsheet_na:
ifsheet_nameinno_conbatandnum!=0:
continue
_df=pd.read_excel(path+xlsx_name,sheet_name=sheet_name,header=0)
#print(df)
ifdfisNone:
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”
合并成功