Como utilizar uma biblioteca de tipos para o Office Automation a partir do Visual C++.NET

Resumo

Este artigo descreve como criar um projeto Visual C++ .NET que atua como um cliente de automatização para aplicações que estão em compatibilidade com COM (Component Object Model). O exemplo neste artigo utiliza Microsoft Foundation Classes (MFC) com wrappers de turmas para um componente do Office.

Mais Informações

Os passos seguintes demonstram como criar um cliente de Automatização simples. Existem três passos principais para este procedimento:

  1. Crie o cliente de Automatização.
  2. Adicione código para automatizar o Microsoft Excel.
  3. Execute o cliente de Automatização.

Pode utilizar o primeiro passo (Criar o Cliente de Automatização) para criar um novo cliente de Automatização, independentemente do servidor de Automatização que estiver a utilizar. O segundo passo (Adicionar Código ao Automatizar o Microsoft Excel) é específico ao servidor de automatização.

Criar um cliente de Automatização

  1. Inicie o Microsoft Visual Studio .NET. No menu Ficheiro, clique em Novo e, em seguida, clique em Projeto. Selecione Aplicação MFC a partir dos tipos de Projetos Visuais C++ e, em seguida, nomee o nome Projeto Automático.

  2. Quando o Assistente de Aplicações MFC aparecer, clique em Tipo de Aplicação, defina o tipo de aplicação como Base da Caixa de Diálogo e, em seguida, clique em Concluir.

  3. Modifique a IDD_AUTOPROJECT_DIALOG de diálogo Da seguinte forma:

    1. Remova o controlo Etiqueta (IDC_STATIC) e o botão Cancelar (IDCANCEL).
    2. Altere o ID do botão OK para "IDRUN" e a legenda para "Executar".
  4. Crie embrulhos de turma a partir da biblioteca de tipos para o servidor de automatização da seguinte forma:

    1. No Explorador de Soluções, clique com o botão direito do rato em AutoProject e, em seguida, clique em Adicionar Turma.

    2. Clique em Classe MFC a partir de Typelib e, em seguida, clique em Abrir.

    3. Clique em Adicionar uma turma de: Registo e localize a biblioteca de tipos registados para o seu servidor de Automatização.

      Para este exemplo, selecione "Biblioteca de Tipos do Microsoft Excel 10.0" para o Microsoft ExcelXP ou "Biblioteca de Tipos do Microsoft Excel 9.0" para o Microsoft Excel 2000.

    4. Selecione as interfaces de que precisa da lista e, em seguida, clique no símbolo maior que (>) para os adicionar à lista de interfaces para as quais o MFC cria embrulhos. Clique em Concluir quando tiver adicionado todas as interfaces.

      Para este exemplo, só precisa da interface _Application interface.

      Importante Se houver muitas interfaces na biblioteca de tipos escolhida, selecione apenas as interfaces que irá utilizar porque o MFC irá gerar um ficheiro de cabeçalho separado para cada interface selecionada. Ao minimizar as suas seleções de interface, pode evitar custos gerais desnecessários durante a geração de ficheiros e compilações.

  5. Para carregar e ativar a biblioteca de serviços COM para a função CAutoProjectApp::InitInstance, adicione o seguinte código:

    if(!AfxOleInit())  // Your addition starts here.
    {
      AfxMessageBox("Cannot initialize COM dll");
      return FALSE;
      // End of your addition.
    }
    
    AfxEnableControlContainer();
    
    
  6. Adicione uma diretiva incluir para cada ficheiro de cabeçalho gerado a partir das interfaces na biblioteca de tipos do servidor de automatização. Adicione as diretivos após a inspeção incluir stdafx.h na parte superior do AutoProjectDlg.cpp.

    Para este exemplo, adicione uma inclua para o ficheiro de cabeçalho CApplication.h, que é gerado para a interface de _Application:

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

Adicionar código para automatizar o Microsoft Excel

Na caixa IDD_AUTOPROJECT_DIALOG, clique com o botão direito do rato em Executar e, em seguida, clique em Adicionar alça de evento a partir da caixa de listagem. No Assistente de Alças de Eventos, selecione o BN_CLICKED de mensagem e, em seguida, clique em Adicionar e Editar. Adicione o seguinte código para automatizar o Excel no handler:

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);
   }
} 

Executar o cliente de Automatização

Prima a tecla F5 para criar e executar o cliente de Automatização. Quando a caixa de diálogo aparecer, clique em Executar. O cliente de automatização inicia o Excel e torna a aplicação visível. Repare que o Excel permanece em execução mesmo quando o cliente de Automatização terminar porque foi atribuído ao utilizador controlo da aplicação.

Notas adicionais

Depois de adicionar turmas a partir de uma biblioteca de tipos ao seu projeto, poderá reparar que aparecem na Vista de Turma do projeto. Na Vista de Turma, pode fazer duplo clique numa turma para ver os métodos da mesma e, em seguida, fazer duplo clique no método para ver a definição desta função no ficheiro de implementação do invólucro MFC. Pode rever a definição de uma função de membro se quiser verificar um tipo de retorno ou se tiver de alterar uma implementação de uma função.

Embora os passos anteriores ilustram como automatizar o Microsoft Excel, pode aplicar as mesmas ideias para automatizar outras aplicações. A lista seguinte contém os nomes de ficheiros das bibliotecas de tipos de outras aplicações do Microsoft Office:

| Aplicação| Biblioteca de Tipos| |---|---| | Microsoft Access 97| Msacc8.olb| | Base de Dados do Microsoft Jet 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| | Base de Dados do Microsoft Jet 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| | Microsoft Office 2007|MSO.dll| | Microsoft Office Outlook 2007| MSOutl.olb| | Microsoft Office PowerPoint 2007| MSPpt.olb| | Microsoft Office Word 2007| MSWord.olb| Nota A localização predefinida para estas bibliotecas de tipos é:

| Versão do Office| Caminho| |---|---| | Office 97| C:\Programas\Microsoft Office\Office| | Office 2000| C:\Programas\Microsoft Office\Office| | Office XP| C:\Programas\Microsoft Office\Office10| | Office 2003| C:\Program Files\Microsoft Office\Office11| |2007 Office| C:\Programas\Microsoft Office\Office12| A localização predefinida para Dao350.dll e Dao360.dll é C:\Program Files\Common Files\Microsoft Shared\Dao.