我想在工作簿中选择多个工作表(按特定顺序),并使用win32com将它们导出为单个PDF。我试过了:
wb_HC.Sheets(['sheetname1','sheetname2']).ExportAsFixedFormat(0, workdir+'\\'+run_date+'_MD_Summary.pdf')
但这不起作用。我知道在VBA工作表中可以称为工作表数组:
Array(sheets(1), sheets(2))
但我认为这不等同于Python中的list()。
答案 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 ...
处理(另一种最佳实践方法)。