WIN32COM以PDF格式保存/导出多个工作表

时间:2016-09-12 02:02:45

标签: python excel win32com

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

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

但这不起作用。我知道在VBA工作表中可以称为工作表数组:

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

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

1 个答案:

答案 0 :(得分:3)

考虑使用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 ...处理(另一种最佳实践方法)。