The Wayback Machine - https://web.archive.org/web/20070824025428/http://www.codeguru.com:80/cpp/com-tech/activex/tutorials/print.php/c5569/
www.codeguru.com/cpp/com-tech/activex/tutorials/article.php/c5569/

Back to Article

Home >> Visual C++ / C++ >> COM-based Technologies >> ActiveX Programming >> Tutorials

Innotas Whitepaper: Implementing Project Portfolio Management in Digestible Bites. Learn how IT can implement PPM in small steps & achieve benefits in days, not months at a fraction of the cost.

Automating Microsoft Office Applications
Rating:

V Girish (view profile)
August 19, 2003

Environment: Tutorials, Microsoft Office

Introduction

This tutorial helps you to learn the basics of automation. With this code, you can control PowerPoint from your application. You can open PowerPoint programmatically, open any presentation, go to any slide that you want to, run the slideshow, and so forth.

Steps to Follow


(continued)



Maximizing the Performance of SUSE Linux Enterprise Real Time for Financial Services Applications on AMD64 Technology Whitepaper: The technology needs of financial services companies offer a remarkable challenge for computer hardware and software vendors. The central requirement is deterministic, real-time computing for high-priority transactions that must execute accurately and predictably every time. However, a real-time computing solution must also offer rock-solid stability and reliability, since there is zero tolerance for missed transactions, lost records, or system downtime.
Click here.
 
Real-World Performance of SUSE Linux Enterprise Real Time
Whitepaper: This paper documents the excellent results of several proof-of-concept exercises conducted with database and financial applications using SUSE Linux Enterprise Real Time. It also includes specific results of real-time tests comparing the PDL times of SUSE Linux Enterprise Real Time with Red Hat and other Linux kernels.
Click here.
 
Technical Whitepaper: SUSE Enterprise Linux Real Time
Whitepaper: This paper outlines the specific technical capabilities of SUSE Linux Enterprise Real Time, including enterprise services offerings, and shows how SUSE Linux Enterprise Real Time delivers a solid foundation for your Service-oriented Infrastructure (SOI). Learn how SUSE Linux Enterprise Real Time can be used to build the next generation of data-center computing, creating an on-demand infrastructure that is modular, highly responsive and easy to deploy and control.
Click here.

By following the same steps given below, you can automate Word, Excel, or any other Microsoft Office application.

  1. Create a dialog-based application and in the App Wizard's step 3 of 6, select the automation checkbox.
  2. Create buttons for Start, Run, Close, First Slide, Last Slide, Previous Slide, and Next Slide functions and use the following functions accordingly.
  3. In your application's InitInstance function, add the following lines:
  4.   // Initialize OLE libraries
      if (!AfxOleInit())
      {
        AfxMessageBox("Failed to initialize OLE");
        return FALSE;
      }
    
  5. In your dialog's class, open the class wizard, select the automation tab, select "Add Class" ... "From a type library", and then select msppt8.olb from "C:\Program Files\Microsoft Office\Office\".
  6. In your header file of your dialog, include the following line:
  7.   #include "msppt8.h"
  8. Add the following variables in your dialog's header file.
  9.   _Application app;    // app is the PowerPoint
                           // _Application object
    
      Presentations Presentations;
      _Presentation Presentation;
    
      SlideShowView View;
    
      SlideShowWindow SlideShowWindow;
      SlideShowSettings slideshow;
      Slides slides;
      _Slide slide;
    
  10. To start PowerPoint, you have to write this code in the Start button's function.
  11.   void CPowerPntDlg::OnBtnStart()
      {
        // Start PowerPoint and get Application object...
        if(!app.CreateDispatch("Powerpoint.Application"))
        {
            AfxMessageBox("Couldn't start PowerPoint.");
        }
        else    // Make PowerPoint visible and display a message
        {
            app.SetVisible(TRUE);
            TRACE("PowerPoint is Running!");
        }
      }
    
  12. To open a presentation from the hard disk, add this code in the Open button's function call.
  13.   void CPowerPntDlg::OnBtnOpen()
      {
        static char BASED_CODE szFilter[] = "PowerPoint Files
                                            (*.ppt)|*.ppt||";
        CFileDialog FileDlg(TRUE,"PPT",NULL,
                            OFN_FILEMUSTEXIST|OFN_NONETWORKBUTTON|
                            OFN_PATHMUSTEXIST,szFilter);
        FileDlg.DoModal();
    
        // To get the selected file's path and name
        CString strFileName;
        strFileName = FileDlg.GetPathName();
    
        if(!strFileName.IsEmpty())
        {
            Presentations = app.GetPresentations();
            Presentation  = Presentations.Open(strFileName,0,0,1);
        }
      }
    
  14. To close PowerPoint, add this code in the Close button's function call.
  15.   void CPowerPntDlg::OnBtnClose()
      {
        if (CanExit())
            app.Quit();
      }
    
  16. To run the slideshow, use this code in the Run button's function call
  17.   void CPowerPntDlg::OnBtnRun()
      {
        Presentations = app.GetActivePresentation();
          slides      = Presentation.GetSlides();
         // Show the first slide of the presentation
        slide         = slides.Item(COleVariant((long)1));
    
        //Run the show
        slideshow     = Presentation.GetSlideShowSettings();
        slideshow.Run();
      }
    
  18. Sometimes, you might want to start all over from the first slide. To go to the first slide, you can use this code:
  19.   void CPowerPntDlg::OnBtnFirst()
      {
        Presentation    = app.GetActivePresentation();
        SlideShowWindow = Presentation.GetSlideShowWindow();
        View            = SlideShowWindow.GetView();
        View.First();
      }
    
  20. And similarly, to go to the last slide
  21.   void CPowerPntDlg::OnBtnLast()
      {
        Presentation    = app.GetActivePresentation();
        SlideShowWindow = Presentation.GetSlideShowWindow();
        View            = SlideShowWindow.GetView();
        View.Last();
      }
    
  22. Now that you have the slideshow running, you would obviously want to go to the previous slide at some point of time. To do just that, you can use this code:
  23.   void CPowerPntDlg::OnBtnPrevious()
      {
        Presentation    = app.GetActivePresentation();
        SlideShowWindow = Presentation.GetSlideShowWindow();
        View            = SlideShowWindow.GetView();
        View.Previous();
      }
    
  24. Interested in going to the next slide now? In that case, this function will help you:
  25.   void CPowerPntDlg::OnBtnNext()
      {
        Presentation    = app.GetActivePresentation();
        SlideShowWindow = Presentation.GetSlideShowWindow();
        View            = SlideShowWindow.GetView();
        View.Next();
      }
    

Conclusion

That's it, folks. Check out the other functions available for transitions, animations, and so forth and you can go ahead on your own. This is the basic framework and you can see how easy it is to handle PowerPoint. It's the same case with Excel, Word, or any other Microsoft Office application. All luck to you and have a great time. You can also check out http://support.microsoft.com/default.aspx?scid=kb;en-us;Q178749 for more information.

I used this code to do remote PowerPoint presentations. The concept was to run a presentation at one place and the clients will be looking at it simultaneously from different places at the same time.

Tools:
Add www.codeguru.com to your favorites
Add www.codeguru.com to your browser search box
IE 7 | Firefox 2.0 | Firefox 1.5.x
Receive news via our XML/RSS feed

Cach�, the world�s fastest object database, does away with mapping. Free download.
.NET Done Right. Serve your customers, not your servers. VERIO Web Servers for Windows. Learn more.
Windows Server "Longhorn" Showcase Roadshow: Developer Essentials.
Bring your user interfaces to life with richer, more intuitive information displays. Read more.
Get the most out of Visual Studio. Visit the Microsoft Visual Studio Extensibility Portal on DevX.

Solutions