파워포인트 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에 대해서 다루어 볼까 합니다.

Posted in MFC

Comments

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

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다