【问题标题】:WIN32COM saving/exporting multiple sheets as PDFWIN32COM 将多个工作表保存/导出为 PDF
【发布时间】:2017-01-19 10:17:15
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: python excel win32com


    【解决方案1】:

    考虑使用 Python 的 list [] 方法,它可以对应于 VBA 的 Array()。将其应用于传递工作表索引号或工作表名称的 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 ... 处理(另一种最佳实践方法)。

    【讨论】:

    • 我相信有更好的方法。 Excel 允许这样的事情: Sheets(Array("Sheet1", "Sheet2")).Select Activesheet.(code to export) 问题是我们如何在 win32com 中“选择”多个工作表并将其作为“活动表”。
    • 我的立场是正确的,好先生。事实上,您可以保存multiple sheets with your Array() selection。请参阅使用 [] 替换 Array() 的更新。
    猜你喜欢
    • 2013-01-02
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    相关资源
    最近更新 更多