2016-09-12 5 views
0

통합 문서에서 여러 시트를 특정 순서로 선택하고 win32com을 사용하여 단일 PDF로 내 보내려합니다. 나는 시도했다 :WIN32COM 여러 시트를 PDF로 저장/내보내기

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

그러나 이것은 작동하지 않는다. 나는 VBA에서 시트는 시트 배열로 호출 할 수 있다는 사실을 알고 :

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

하지만이 파이썬에서 목록()에 해당되지라고 생각합니다.

답변

2

VBA의 Array()에 해당하는 파이썬 목록 []을 사용해보십시오. 시트 번호 또는 시트 이름을 전달하여 Worksheets() 메서드에 적용하십시오. 그런 다음 ExportAsFixedFormatxlApp.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

나는 더 좋은 방법이 있다고 믿습니다. 엑셀은 다음과 같이 할 수 있습니다 :.. 시트 (배열 ("Sheet1의", "시트 2를")) Activesheet를 선택 문제를 (코드 수출) 우리가 win32com에서 여러 시트를 "선택"을 전달할 어떻게입니다 "액티브 시트"로 다음 줄로 이동하십시오. –

+0

나는 고쳐 줬다. 선생님. 사실 Array() 선택으로 여러 시트를 저장할 수 있습니다 (http://stackoverflow.com/questions/14404650/save-multiple-sheets-to-pdf). 'Array()'대신'[] '를 사용하여 업데이트를 참조하십시오. – Parfait