Uso de una biblioteca de tipos para Office Automation desde Visual C++.NET

Resumen

En este artículo se describe cómo compilar un proyecto .NET de Visual C++ que actúa como cliente de Automation para aplicaciones compatibles con el modelo de objetos componentes (COM). En el ejemplo de este artículo se usan clases de Microsoft Foundation (MFC) con contenedores de clases para un componente de Office.

Más información

En los pasos siguientes se muestra cómo crear un cliente simple de Automation. Hay tres pasos principales para este procedimiento:

  1. Cree el cliente de Automation.
  2. Agregue código para automatizar Microsoft Excel.
  3. Ejecute el cliente de Automation.

Puede usar el primer paso (Crear el cliente de Automation) para crear un nuevo cliente de Automation independientemente del servidor de Automation que use. El segundo paso (Agregar código para automatizar Microsoft Excel) es específico del servidor de Automation.

Creación de un cliente de Automation

  1. Inicie Microsoft Visual Studio .NET. En el menú Archivo, haga clic en Nuevo y, a continuación, haga clic en Proyecto. Seleccione Aplicación MFC en los tipos proyectos de Visual C++ y, a continuación, asigne al proyecto el nombre AutoProyecto.

  2. Cuando aparezca el Asistente para aplicaciones MFC, haga clic en Tipo de aplicación, establezca el tipo de aplicación en Basado en cuadro de diálogoy, a continuación, haga clic en Finalizar.

  3. Modifique el cuadro de diálogo IDD_AUTOPROJECT_DIALOG de la siguiente manera:

    1. Quite el control Etiqueta (IDC_STATIC) y el botón Cancelar (IDCANCEL).
    2. Cambie el identificador del botón OK a "IDRUN" y el título a "Ejecutar".
  4. Cree contenedores de clases a partir de la biblioteca de tipos para el servidor de Automation de la siguiente manera:

    1. En Explorador de soluciones, haga clic con el botón derecho en Autoproyectoy, a continuación, haga clic en Agregar clase.

    2. Haga clic en Clase MFC en Typeliby, a continuación, haga clic en Abrir.

    3. Haga clic en Agregar una clase de: Registro y busque la biblioteca de tipos registrada para el servidor de Automation.

      En este ejemplo, seleccione "Biblioteca de tipos de Microsoft Excel 10.0" para Microsoft ExcelXP o "Biblioteca de tipos de Microsoft Excel 9.0" para Microsoft Excel 2000.

    4. Seleccione las interfaces que necesita de la lista y, a continuación, haga clic en el símbolo mayor que (>) para agregarlas a la lista de interfaces para las que MFC crea contenedores. Haga clic en Finalizar cuando haya agregado todas las interfaces.

      En este ejemplo, solo necesita la interfaz _Application.

      Importante Si hay muchas interfaces en la biblioteca de tipos que eligió, seleccione solo las interfaces que usará, ya que MFC generará un archivo de encabezado independiente para cada interfaz seleccionada. Al minimizar las selecciones de interfaz, puede evitar sobrecargas innecesarias durante la generación y compilación de archivos.

  5. Para cargar y habilitar la biblioteca de servicios COM en la función CAutoProjectApp::InitInstance, agregue el código siguiente:

    if(!AfxOleInit())  // Your addition starts here.
    {
      AfxMessageBox("Cannot initialize COM dll");
      return FALSE;
      // End of your addition.
    }
    
    AfxEnableControlContainer();
    
    
  6. Agregue una directiva include para cada archivo de encabezado generado a partir de las interfaces de la biblioteca de tipos del servidor de Automation. Agregue las directivas después de la instrucción include para Stdafx.h en la parte superior de AutoProjectDlg.cpp.

    En este ejemplo, agregue una inclusión para el archivo de encabezado CApplication.h, que se genera para la interfaz _Application:

          #include "stdafx.h"
          #include "CApplication.h"
    
    

Adición de código para automatizar Microsoft Excel

En el cuadro de diálogo IDD_AUTOPROJECT_DIALOG , haga clic con el botón derecho en Ejecutary, a continuación, haga clic en Agregar controlador de eventos en el cuadro de lista desplegable. En el Asistente para controladores de eventos, seleccione el tipo de mensaje BN_CLICKED y, a continuación, haga clic en Agregar y editar. Agregue el código siguiente para automatizar Excel en el controlador:

void CAutoProjectDlg::OnBnClickedRun()
{
   CApplication app;  // app is the Excel _Application object

// Start Excel and get Application object.

if(!app.CreateDispatch("Excel.Application"))
   {
      AfxMessageBox("Cannot start Excel and get Application object.");
      return;
   }
   else
   {
      //Make the application visible and give the user control of
      //Microsoft Excel.
      app.put_Visible(TRUE);
      app.put_UserControl(TRUE);
   }
} 

Ejecución del cliente de Automation

Presione la tecla F5 para compilar y ejecutar el cliente de Automation. Cuando aparezca el cuadro de diálogo, haga clic en Ejecutar. El cliente de Automation inicia Excel y hace que la aplicación sea visible. Tenga en cuenta que Excel sigue ejecutándose incluso cuando finaliza el cliente de Automation porque al usuario se le ha dado el control de la aplicación.

Notas adicionales

Después de agregar clases de una biblioteca de tipos al proyecto, es posible que observe que aparecen en la vista de clases del proyecto. En la vista de clases, puede hacer doble clic en una clase para ver los métodos de esa clase y, a continuación, hacer doble clic en el método para ver la definición de esa función en el archivo de implementación del contenedor MFC. Puede revisar la definición de una función miembro si desea comprobar un tipo de valor devuelto o si debe cambiar una implementación de una función.

Aunque los pasos anteriores ilustran cómo automatizar Microsoft Excel, puede aplicar las mismas ideas para automatizar otras aplicaciones. La lista siguiente contiene los nombres de archivo de las bibliotecas de tipos de otras aplicaciones de Microsoft Office:

| Aplicación| Biblioteca de tipos| |---|---| | Microsoft Access 97| Msacc8.olb| | Microsoft Jet Database 3.5|DAO350.dll| | Microsoft Binder 97| Msbdr8.olb| | Microsoft Excel 97| Excel8.olb| | Microsoft Graph 97| Graph8.olb| | Microsoft Office 97|Mso97.dll| | Microsoft Outlook 97| Msoutl97.olb| | Microsoft PowerPoint 97| Msppt8.olb| | Microsoft Word 97| Msword8.olb| ||| | Microsoft Access 2000| Msacc9.olb| | Microsoft Jet Database 3.51|DAO360.dll| | Microsoft Binder 2000| Msbdr9.olb| | Microsoft Excel 2000| Excel9.olb| | Microsoft Graph 2000| Graph9.olb| | Microsoft Office 2000|Mso9.dll| | Microsoft Outlook 2000| Msoutl9.olb| | Microsoft PowerPoint 2000| Msppt9.olb| | Microsoft Word 2000| Msword9.olb | ||| | Microsoft Access 2002| Msacc.olb| | Microsoft Excel 2002|Excel.exe| | Microsoft Graph 2002|Graph.exe| | Microsoft Office 2002|MSO.dll| | Microsoft Outlook 2002| MSOutl.olb| | Microsoft PowerPoint 2002| MSPpt.olb| | Microsoft Word 2002| MSWord.olb| ||| | Microsoft Office Access 2003| Msacc.olb| | Microsoft Office Excel 2003|Excel.exe| | Microsoft Office Graph 2003|Graph.exe| | Microsoft Office 2003|MSO.dll| | Microsoft Office Outlook 2003| MSOutl.olb| | Microsoft Office PowerPoint 2003| MSPpt.olb| | Microsoft Office Word 2003| MSWord.olb| ||| | Microsoft Office Access 2007| Msacc.olb| | Microsoft Office Excel 2007|Excel.exe| | Microsoft Office Graph 2007|Graph.exe| | 2007 Microsoft Office|MSO.dll| | Microsoft Office Outlook 2007| MSOutl.olb| | Microsoft Office PowerPoint 2007| MSPpt.olb| | Microsoft Office Word 2007| MSWord.olb| Nota La ubicación predeterminada para estas bibliotecas de tipos es:

| Versión de Office| Ruta de acceso| |---|---| | Office 97| C:\Archivos de programa\Microsoft Office\Office| | Office 2000| C:\Archivos de programa\Microsoft Office\Office| | Office XP| C:\Archivos de programa\Microsoft Office\Office10| | Office 2003| C:\Archivos de programa\Microsoft Office\Office11| |2007 Office| C:\Archivos de programa\Microsoft Office\Office12| La ubicación predeterminada para Dao350.dll y Dao360.dll es C:\Archivos de programa\Archivos comunes\Microsoft Shared\Dao.