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