WIN32COM将多个工作表保存/导出为PDF

我想在工作簿中select多个工作表(按照特定顺序),并使用win32com将其作为单个PDF导出。 我试过了:

wb_HC.Sheets(['sheetname1','sheetname2']).ExportAsFixedFormat(0, workdir+'\\'+run_date+'_MD_Summary.pdf') 

但是这不起作用。 我知道,在VBA表可以称为一个表格数组:

 Array(sheets(1), sheets(2)) 

但我认为这不等同于Python中的list()。

考虑使用Python的list []方法,它可以对应于VBA的Array() 。 将其应用于传递Sheet索引号或Sheet名称的Worksheets()方法。 然后在ExportAsFixedFormat限定方法:

 import os import win32com.client workdir = "C:\\Path\\To\\Working\\Directory" rundate = '2016-09-11' try: xlApp = win32com.client.Dispatch("Excel.Application") wb = xlApp.Workbooks.Open(os.path.join(workdir, 'ExcelFile.xlsx')) wb.Worksheets(["Sheet1", "Sheet2"]).Select() xlTypePDF = 0 xlQualityStandard = 0 xlApp.ActiveSheet.ExportAsFixedFormat(xlTypePDF, os.path.join(workdir, run_date+'_MD_Summary.pdf'), xlQualityStandard, True, True) except Exception as e: print(e) finally: wb.Close(False) xlApp.Quit wb = None xlApp = None 

顺便说一下,一定要把你的处理包装在try/except/finally块中。 否则,您遇到的任何错误都将使Excel.exe在后台进程中运行。 在此设置中,脚本始终closures工作簿,并且不pipe错误如何都不初始化COM对象。 在VBA中的副本将是On Error Goto ...处理(另一个最佳实践方法)。