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原生方法时方法名的大小写

posted @ 2022-10-27 16:58  ukeedy  阅读(600)  评论(0)    收藏  举报