WIN32COM saving/exporting 多张 PDF

WIN32COM saving/exporting multiple sheets as 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 的列表 [] 方法,它可以对应于 VBA 的 Array()。将其应用于传递 Sheet 索引号或 Sheet 名称的 Worksheets() 方法。然后在 ExportAsFixedFormat 中用 xlApp.ActiveSheet:

限定方法
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 运行。在此设置中,脚本始终关闭工作簿并取消初始化 COM 对象,无论出现什么错误。 VBA 中的对应项是 On Error Goto ... 处理(另一种最佳实践方法)。