Cómo automatizar PowerPoint utilizando Visual C++ 5.0 o Visual C++ 6.0 con Foundation Classes

Seleccione idioma Seleccione idioma
Id. de artículo: 222960 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Resumen

En este artículo se describe cómo automatizar Microsoft PowerPoint utilizando Visual C++ 5.0 o Visual C++ 6.0 con el Microsoft Foundation Classes (MFC).

Más información

Utilizando la automatización de PowerPoint mediante programación puede imprimir, mostrar diapositivas y realizar la mayoría de las cosas que puede hacer de forma interactiva. Siga estos pasos para generar y ejecutar el ejemplo de automatización:
  1. Cree un nuevo proyecto EXE de MFC basada en cuadros de diálogo.
  2. Agregue un botón a su cuadro de diálogo y un controlador de BN_CLICKED para él.
  3. Abrir ClassWizard (CTRL+W), haga clic en la ficha automatización , haga clic en Agregar clase y seleccione de una biblioteca de tipo .
  4. Vaya al directorio donde instaló Office (por ejemplo, c:\Archivos de programa\Microsoft Office\Office) y elija Msppt8.olb . La biblioteca de objetos de PowerPoint para PowerPoint 2000 se denomina Msppt9.olb. La biblioteca de objetos de PowerPoint para PowerPoint 2002 es msppt.olb y se encuentra, de forma predeterminada, en la carpeta c:\Archivos de programa\Microsoft Office\Office10. La biblioteca de objetos de PowerPoint para Microsoft Office PowerPoint 2003 es msppt.olb y se encuentra, de forma predeterminada, en la carpeta c:\Archivos de programa\Microsoft Office\Office11
  5. Seleccione todas las clases que encuentre y haga clic en Aceptar para volver a su proyecto. ClassWizard ha generado algunas automatización "clases de contenedor" desde la biblioteca de tipo de PowerPoint y crea los archivos Msppt8.h y Msppt8.cpp.
  6. Agregue el código siguiente al controlador de botón:
    // Start PowerPoint.
    _Application app;
    COleException e;
    if(!app.CreateDispatch("Powerpoint.Application", &e)) {
       CString str;
       str.Format("CreateDispatch() failed w/err 0x%08lx", e.m_sc),
       AfxMessageBox(str, MB_SETFOREGROUND);
       return;
    }
    
    // Make it visible.
    app.SetVisible(TRUE);
    
    // Get Presentations collection and add a new presentation.
    Presentations presSet(app.GetPresentations());
    _Presentation pres(presSet.Add(TRUE));
    
    // Get Slides collection and add a new slide.
    Slides slideSet(pres.GetSlides());
    _Slide slide1(slideSet.Add(1, 2));
    
    // Add text to slide, by navigating the slide as follows:
    // slide1.shapes(#).TextFrame.TextRange.Text
    {
       Shapes shapes(slide1.GetShapes());
       Shape shape(shapes.Item(COleVariant((long)1)));
       TextFrame textFrame(shape.GetTextFrame());
       TextRange textRange(textFrame.GetTextRange());
       textRange.SetText("My first slide");
    }
    {
       Shapes shapes(slide1.GetShapes());
       Shape shape(shapes.Item(COleVariant((long)2)));
       TextFrame textFrame(shape.GetTextFrame());
       TextRange textRange(textFrame.GetTextRange());
       textRange.SetText("Automating PowerPoint is easy\r\n"
          "Using Visual C++ is powerful!");
    }
    
    // Add another slide with a chart.
    _Slide slide2(slideSet.Add(2, 5));
    
    // Add text to slide as before.
    {
       Shapes shapes(slide2.GetShapes());
       Shape shape(shapes.Item(COleVariant((long)1)));
       TextFrame textFrame(shape.GetTextFrame());
       TextRange textRange(textFrame.GetTextRange());
       textRange.SetText("Slide 2's topic");
    }
    {
       Shapes shapes(slide2.GetShapes());
       Shape shape(shapes.Item(COleVariant((long)2)));
       TextFrame textFrame(shape.GetTextFrame());
       TextRange textRange(textFrame.GetTextRange());
       textRange.SetText("You can create and use charts "
          "in your PowerPoint slides!");
    }
    
    // Add a chart where the default one was created.
    {
       // First get coordinates of old chart.
       float cTop, cWidth, cHeight, cLeft;
       Shapes shapes(slide2.GetShapes());
       Shape shape(shapes.Item(COleVariant((long)3)));
       cTop = shape.GetTop();
       cWidth = shape.GetWidth();
       cHeight = shape.GetHeight();
       cLeft = shape.GetLeft();
    
       // Delete original chart.
       shape.Delete();
    
       // Now add your own back where old one was.
       Shape tmpShape(shapes.AddOLEObject(cLeft, cTop, cWidth, cHeight,
          "MSGraph.Chart", "", 0, "", 0, "", 0));
    }
    
    // Add another slide, with an Organization chart.
    _Slide slide3(slideSet.Add(3, 7));
    
    // Add text to slide as before.
    {
    
       Shapes shapes(slide3.GetShapes());
       Shape shape(shapes.Item(COleVariant((long)1)));
       TextFrame textFrame(shape.GetTextFrame());
       TextRange textRange(textFrame.GetTextRange());
       textRange.SetText("The rest is only limited by your Imagination");
    }
    // Add a chart where the default one was created.
    {
       // First get coordinates of old chart.
       float cTop, cWidth, cHeight, cLeft;
       Shapes shapes(slide3.GetShapes());
       Shape shape(shapes.Item(COleVariant((long)2)));
       cTop = shape.GetTop();
       cWidth = shape.GetWidth();
       cHeight = shape.GetHeight();
       cLeft = shape.GetLeft();
    
       // Delete original chart.
       shape.Delete();
    
       // Now add your own back where old one was.
       // The next line assumes you have the Microsoft OrgChart application
       // installed and registered on your computer.
       Shape tmpShape(shapes.AddOLEObject(cLeft, cTop, cWidth, cHeight,
          "OrgPlusWOPX.4", "", 0, "", 0, "", 0));
    }
    
    // Setup slide show properties.
    for(int i=1; i<=3; i++) {
       _Slide slide(slideSet.Item(COleVariant((long)i)));
       SlideShowTransition sst(slide.GetSlideShowTransition());
       sst.SetEntryEffect(513); // Random.
       sst.SetAdvanceOnTime(TRUE);
       sst.SetAdvanceTime(5.0); // 5-seconds per slide.
    }
    // Prepare and run a slide show.
    {
       SlideShowSettings sss(pres.GetSlideShowSettings());
       sss.SetShowType(3); // Kiosk.
       sss.SetLoopUntilStopped(TRUE);
       sss.SetRangeType(1); // Show all.
       sss.SetAdvanceMode(2); // Use slide timings.
       SlideShowWindow ssw(sss.Run()); // Run show.
    }
    
    // Sleep so user can watch slide show.
    ::Sleep(15000);
    
    // Tell PowerPoint to quit.
    app.Quit();
    					
  7. Agregue las líneas siguientes justo antes de la implementación del controlador del botón:
    #include "msppt8.h" //msppt9.h for PowerPoint 2000, msppt.h for PowerPoint 2002 and PowerPoint 2003
    
    // Ole initialization class.
    class OleInitClass {
    public:
       OleInitClass() {
          OleInitialize(NULL);
       }
       ~OleInitClass() {
          OleUninitialize();
       }
    };
    // This global class calls OleInitialize() at
    // application startup, and calls OleUninitialize()
    // at application exit.
    OleInitClass g_OleInitClass;
    					
  8. Compilar y ejecutar.

Referencias

Para obtener información adicional acerca de cómo automatizar aplicaciones de Microsoft Office desde Visual C++, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
196776Utilizar Visual C++ de automatización de Office

Propiedades

Id. de artículo: 222960 - Última revisión: miércoles, 24 de enero de 2007 - Versión: 4.3
La información de este artículo se refiere a:
  • Microsoft Foundation Class Library 4.2 sobre las siguientes plataformas
    • Microsoft Visual C++ 5.0 Standard
    • Microsoft Visual C++ 6.0 Service Pack 5
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft PowerPoint 97 Standard Edition
Palabras clave: 
kbmt kbautomation kbhowto KB222960 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 222960

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com