xlwings及win32com两种方式合并Excel工作簿
应用场景:有多份只有一个工作表的Excel工作簿需要合并到一个Excel工作簿里
xlwings方式,代码如下:
#/usr/bin/python # -*- coding:UTF-8 -*- from pathlib import Path import xlwings as xw pwd=Path(__file__).parent app=xw.App(visible=False) wb=app.books.active wb.save(pwd.joinpath('hebing.xlsx')) for f in pwd.glob('*.xls'): print(f) wb1=app.books.open(f) # wb1.sheets[0].api.Copy(After=wb.sheets[-1].api)#0.22前版本,使用win32原生方法 wb1.sheets[0].copy(after=wb.sheets[-1])#0.22后版本 wb.sheets.active.name=wb.sheets.active.range('b3').value wb1.close() wb.sheets[0].delete()#删除第一张空表 wb.save(pwd.joinpath('hebing.xlsx')) wb.close()#关闭工作簿 app.quit()#关闭Excel程序
win32com方式,代码如下:
#/usr/bin/python # -*- coding:UTF-8 -*- from pathlib import Path import win32com.client as win32 pwd=Path(__file__).parent excel = win32.gencache.EnsureDispatch('Excel.Application') excel.DisplayAlerts=False fPath=pwd.joinpath('daochu.xlsx') print(fPath) wb1=excel.Workbooks.Add() wb1.SaveAs(str(fPath),FileFormat = 51) for f in pwd.glob('*.xls'): print(f) wb=excel.Workbooks.Open(f) ws=wb.Sheets(1) ws.Copy(After=wb1.ActiveSheet) wb1.ActiveSheet.Name=ws.Range('b3').Value wb.Close() wb1.Sheets(1).Delete() wb1.SaveAs(str(fPath),FileFormat = 51) wb1.Close() excel.Quit()
总结:win32com方式相对于vba要注意方法的大小写及方法后面的括号,xlwings方式要注意使用Excel原生方法时方法名的大小写

浙公网安备 33010602011771号