Рассмотрите возможность использования списка Python []
, который может соответствовать Array()
VBA. Примените его к методу 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 («Лист1», «Лист2»)) Выберите ActiveSheet (код для экспорта) Проблема заключается в том, как мы «выбрать» несколько листов в win32com и передать его на следующую строку как «Activesheet». –
Я стою исправленный, хороший сэр. Действительно, вы можете сохранить [несколько листов с помощью выбора Array()] (http://stackoverflow.com/questions/14404650/save-multiple-sheets-to-pdf). См. Обновление с помощью '[]' для 'Array()' substitute. – Parfait