파워포인트 Automation


 파워포인트 Automation



제작 : 서 광 수


email : chps74@hanmail.net



어떤 분의 요청에 의하여 파워포인트를 MFC에서 이용하는 방법에 대해 글을 쓰게 되었습니다. 또 시간을 할애해서(언제가 될지 모르지만… ㅡ.ㅡ;; 다음주부터 “모바일 지로” 프로젝트에 들어갑니다. 그래서 언제가 될지…) Excel과 Access, Word, Outlook등의 Automation에 대해 다루어 보도록 하겠습니다. 아래에서부터는 편의상 존댓말을 생략하도록 하겠습니다. 양해 부탁 드립니다.


자 그럼 시작해보도록 할까요?


1.  다이얼로그 기반의 Application을 생성하고 AppWizard의 step 2/4에서 Automation을 체크한다.


2.  시작, 실행, 닫기 버튼, 그리고 첫 슬라이드, 마지막 슬라이드, 이전 슬라이드, 다음 슬라이드 버튼도 생성 시켜준다. 아래에 보여줄 함수의 사용을 위해서 이다.


3.  이제 Application의 인스턴스 함수에 아래와 같이 코딩을 하자.


// OLE 라이브러리 초기화


if (!AfxOleInit())


{


    AfxMessageBox(“Failed to initialize OLE”);


    return FALSE;


}


4.  다이얼로그 클래스에서 클래스 위자드를 열고 automation탭을 선택한다. 그리고 Add Class를 선택하자. 그런 후에 From a type library에서 msppt9.olb를 찾아 선택하자. 만약 별다른 선택없이 MS Office를 설치했다면 C:\Program Files\Microsoft Office\Office\ 내에 msppt9.olb가 있을 것이다.


5.  Confirm classes에서 모두 선택한 후 확인(OK)을 누른다.


6.  다이얼로그 클래스의 헤드 파일(.h)에 아래의 헤드 파일을 인클루드 시킨다. 아래처럼…


#include “msppt9.h”


7.  다이얼로그의 헤드 파일에 아래와 같이 입력한다.


_Application app; // app is the PowerPoint _Application object



Presentations Presentations;


_Presentation Presentation;



SlideShowView View;



SlideShowWindow SlideShowWindow;


SlideShowSettings slideshow;


Slides slides;


_Slide slide;


8.  파워포인트 실행시키기 위해 아래와 같은 코딩을 해주도록 하자.


void CPowerPntDlg::OnBtnStart()


{


    // 파워포인트를 실행하고 Application 오브젝트를 얻음


    if(!app.CreateDispatch(“Powerpoint.Application”))


    {


        AfxMessageBox(“파워포인트를 실행할 수 없습니다.”);


    }


    else // 메시지를 화면에 띄우고 파워포인트를 보여줌


    {


        app.SetVisible(TRUE);


        TRACE(“파워포인트가 실행 중 입니다.!”);


    }


}


9.  하드 디스크에 있는 프리젠테이션을 열기 위해 아래와 같이 열기 버튼에 작업을 해준다.


void CPowerPntDlg::OnBtnOpen()


{


    static char BASED_CODE szFilter[] = “파워포인트 파일(*.ppt)|*.ppt||”;


    CFileDialog FileDlg(TRUE,”PPT”,NULL,OFN_FILEMUSTEXIST|OFN_NONETWORKBUTTON


                |OFN_PATHMUSTEXIST,szFilter);


    FileDlg.DoModal();



    // 파일의 경로와 명을 선택


    CString strFileName;


    strFileName = FileDlg.GetPathName();



    if(!strFileName.IsEmpty())


    {


        Presentations = app.GetPresentations();


        Presentation = Presentations.Open(strFileName,0,0,1);


    }


}


10. 파워포인트를 닫기 위해 아래와 같은 코드를 삽입하자.


void CPowerPntDlg::OnBtnClose()


{


    if (CanExit())


        app.Quit();


}


11. 슬라이드를 보여주기 위해 실행 버튼에 아래와 같이 코딩을 한다.


void CPowerPntDlg::OnBtnRun()


{


    Presentations = app.GetActivePresentation();


    slides = Presentation.GetSlides();


    // 프리젠테이션의 첫번째 슬라이드를 …


    slide = slides.Item(COleVariant((long)1));



    //슬라이드를 보여줌


    slideshow = Presentation.GetSlideShowSettings();


    slideshow.Run();


}


12. 때로 프리젠테이션을 보다가 첫번째 슬라이드로 가고 싶을 경우가 있을 것이다. 그때를 위해 처음 프리젠테이션으로 가는 것을 구현해보자. 아래와 같이 코딩해주면 간단히 해결이 된다.


void CPowerPntDlg::OnBtnFirst()


{


    Presentation = app.GetActivePresentation();


    SlideShowWindow = Presentation.GetSlideShowWindow();


    View = SlideShowWindow.GetView();


    View.First();


}


13. 그리고 위와 유사하게 마지막 슬라이드로 가는 방법이다.


void CPowerPntDlg::OnBtnLast()


{


    Presentation = app.GetActivePresentation();


    SlideShowWindow = Presentation.GetSlideShowWindow();


    View = SlideShowWindow.GetView();


    View.Last();


}


14. 가끔은 단지 한 슬라이드 앞으로 가고 싶을 경우도 있을 것이다. 그럴 경우를 대비하여 한 슬라이드 앞으로 이동하게끔 코딩을 아래처럼 한다.


void CPowerPntDlg::OnBtnPrevious()


{


    Presentation = app.GetActivePresentation();


    SlideShowWindow = Presentation.GetSlideShowWindow();


    View = SlideShowWindow.GetView();


    View.Previous();


}


15. 같은 방법으로 다음 슬라이드로 이동하는 코딩을 아래와 같이 한다.


void CPowerPntDlg::OnBtnNext()


{


    Presentation = app.GetActivePresentation();


    SlideShowWindow = Presentation.GetSlideShowWindow();


    View = SlideShowWindow.GetView();


    View.Next();


}



여기까지 다룬 내용은 파워포인트의 일부이지만 이제 이것을 응용하여 작업하는 것은 여러분의 몫으로 남기겠습니다.


다음에는 Excel Automation에 대해서 다루어 볼까 합니다.


“파워포인트 Automation” 에 하나의 답글

  1. 한참 헤메고 있었는데 여기서 해결방법을 찾았습니다. 감사합니다. 그런데도 아직 해결해야 할 것이 많아서 가르침을 받고자 합니다. 저는 MFC로 PowerPoint 자동화를 하고 있는데 자료가 너무 없어 진전이 잘 되지 않습니다. 그동안 CSlides 객체에서 CSlide 객체를 가지고 오는 것을 해결하지 못했는데 여기에 답이 있었네요. 지금 VBA를 참고하여 공부하고 있는데 틀린 것이 많아 애 먹고 있습니다. 혹시 MFC로 PPT 자동화 하는데 좋은 자료가 있나요? 도와 주시면 사례를 하겠습니다.

답글 남기기

이메일 주소는 공개되지 않습니다.