2016-09-12 6 views
0

Я хотел бы выбрать несколько листов (в определенном порядке) в книге и экспортировать их как один PDF с помощью win32com. Я пробовал:WIN32COM сохранение/экспорт нескольких листов в формате PDF

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

Но это не работает. Я знаю, что в VBA листы можно назвать как массив листов:

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

Но я думаю, что это не соответствует списку() в Python.

ответ

2

Рассмотрите возможность использования списка 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 ... (другой метод лучшей практики).

+0

Я считаю, что есть лучший способ. Excel позволяет что-то вроде этого:.. Sheets (Array («Лист1», «Лист2»)) Выберите ActiveSheet (код для экспорта) Проблема заключается в том, как мы «выбрать» несколько листов в win32com и передать его на следующую строку как «Activesheet». –

+0

Я стою исправленный, хороший сэр. Действительно, вы можете сохранить [несколько листов с помощью выбора Array()] (http://stackoverflow.com/questions/14404650/save-multiple-sheets-to-pdf). См. Обновление с помощью '[]' для 'Array()' substitute. – Parfait

Смежные вопросы