Você está offline; aguardando reconexão

Como automatizar o Excel usando funções de planilha e MFC

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 178781
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sumário
Este artigo descreve como automatizar o Microsoft Excel 97, Microsoft Excel 2000, Microsoft Excel 2002 ou Microsoft Excel 2003 usando a biblioteca Microsoft Foundation Class (MFC), versão 4.2 (instalado com o Microsoft Visual C++ versões 5.0 e 6.0). Especificamente, este artigo ilustra como usar funções de planilha fornecidas por um add-in, como ferramentas de análise (ATP) e como usar as funções de fórmulas de planilha que são internas para o Microsoft Excel.
Mais Informações
Você pode copiar o código neste artigo para a função de manipulador de mensagem de um evento definido em um arquivo de .cpp MFC. No entanto, a finalidade do código é ilustrar o processo de usar as funções de membro definidas no Excel8.olb para o Excel 97, no Excel9.olb para o Excel 2000 e no Excel.exe para o Excel 2002 e Excel 2003 biblioteca de tipos e interfaces de IDispatch. A principal vantagem é proveniente de leitura e noções básicas sobre o código de exemplo, para que você possa modificar o exemplo ou escrever código do zero para automatizar uma função de planilha no Microsoft Excel usando o MFC.

Passos para criar o projeto

  1. Execute as etapas 1 a 12 no seguinte artigo da Base de dados de Conhecimento da Microsoft para criar um projeto de exemplo que usa o IDispatch interfaces e funções de membro definidas no Excel8.olb, ou Excel9.olb ou Excel.exe para Excel 2002 e biblioteca de tipos Excel 2003:
    178749Como criar um projeto de automação com MFC e uma biblioteca de tipos
  2. Na parte superior da AutoProjectDlg.cpp, adicione a seguinte linha:
          #include "excel8.h"					
    se você estiver automatizando o Excel 2000, incluem excel9.h. Se você estiver automatizando o Excel 2002 ou o Excel 2003, incluir excel.h

  3. Adicione o seguinte código para CAutoProjectDlg::OnRun() no arquivo AutoProjectDLG.cpp: código de exemplo:
          try      {      _Application app;     // app is an _Application object.      _Workbook book;       // More object declarations.      _Worksheet sheet;      Workbooks books;      Worksheets sheets;      Range range;          // Used for Microsoft Excel 97 components.      LPDISPATCH lpDisp;    // Often reused variable.      // Common OLE variants. Easy variants to use for calling arguments.      COleVariant        covTrue((short)TRUE),        covFalse((short)FALSE),        covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);      // Start Microsoft Excel, get _Application object,      // and attach to app object.      if(!app.CreateDispatch("Excel.Application"))       {        AfxMessageBox("Couldn't CreateDispatch() for Excel");        return;       }      // Set visible.      app.SetVisible(TRUE);      // Register the Analysis ToolPak.      CString sAppPath;      sAppPath.Format ("%s\\Analysis\\Analys32.xll", app.GetLibraryPath());      if(!app.RegisterXLL(sAppPath))        AfxMessageBox("Didn't register the Analys32.xll");      // Get the Workbooks collection.      lpDisp = app.GetWorkbooks();     // Get an IDispatch pointer.      ASSERT(lpDisp);      books.AttachDispatch(lpDisp);    // Attach the IDispatch pointer                                       // to the books object.      // Open a new workbook and attach that IDispatch pointer to the      // Workbook object.      lpDisp = books.Add( covOptional );      ASSERT(lpDisp);      book.AttachDispatch( lpDisp );         // To open an existing workbook, you need to provide all         // arguments for the Open member function. In the case of          // Excel 2002 you must provide 16 arguments.         // However in Excel 2003 you must provide 15 arguments.         // The code below opens a workbook and adds it to the Workbook's         // Collection object. It shows 13 arguments, required for Excel         // 2000.         // You need to modify the path and file name for your own         // workbook.      //       // lpDisp = books.Open("C:\\Test",     // Test.xls is a workbook.      // covOptional, covOptional, covOptional, covOptional, covOptional,      // covOptional, covOptional, covOptional, covOptional, covOptional,      // covOptional, covOptional );   // Return Workbook's IDispatch      // pointer.      // Get the Sheets collection and attach the IDispatch pointer to your      // sheets object.      lpDisp = book.GetSheets();      ASSERT(lpDisp);      sheets.AttachDispatch(lpDisp);      // Get sheet #1 and attach the IDispatch pointer to your sheet      // object.      lpDisp = sheets.GetItem( COleVariant((short)(1)) );                                        //GetItem(const VARIANT &index)      ASSERT(lpDisp);      sheet.AttachDispatch(lpDisp);      // Fill range A1 with "1/25/98", the settlement date.      lpDisp = sheet.GetRange(COleVariant("A1"), COleVariant("A1"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetValue(COleVariant("1/25/98")); // Excel 97 & Excel 2000range.SetValue2(COleVariant("1/25/98")); // Excel 2002 and Excel 2003      // Fill range A2 with "11/15/99", the maturity date.      lpDisp = sheet.GetRange(COleVariant("A2"), COleVariant("A2"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetValue(COleVariant("11/15/99"));  // Excel 97 & Excel 2000range.SetValue2(COleVariant("11/15/99")); // Excel 2002 and Excel 2003      // Fill range A3 with "2", the frequency for semi-annual interest      // payments.      lpDisp = sheet.GetRange(COleVariant("A3"), COleVariant("A3"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetValue(COleVariant("2"));  // Excel 97 & Excel 2000range.SetValue2(COleVariant("2"));  // Excel 2002 and Excel 2003      // Fill range A4 with 1, the basis (actual/actual).      lpDisp = sheet.GetRange(COleVariant("A4"), COleVariant("A4"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetValue(COleVariant("1")); // Excel 97 & Excel 2000range.SetValue2(COleVariant("1")); // Excel 2002 and  Excel 2003      // Fill range C1 with the formula "=COUPNCD(A1, A2, A3, A4)" and      // format the cell with a Date type of the Number format.      lpDisp = sheet.GetRange(COleVariant("C1"), COleVariant("C1"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetNumberFormat(COleVariant("mm/dd/yy"));      range.SetFormula(COleVariant("=COUPNCD(A1, A2, A3, A4)"));      /* This is an alternative that works without placing variables on      // the worksheet.      // The values are arguments contained in the SetFormula() call.      // range.SetFormula(COleVariant(                       "=COUPNCD(\"09/15/96\",\"11/15/99\",2,1)"));      */       // *** The example in this block uses a built-in Microsoft Excel      // function.      // You do not have to register any add-in to use the built-in      // Microsoft Excel worksheet functions.      lpDisp = sheet.GetRange(COleVariant("C3"), COleVariant("C3"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetFormula(COleVariant("=SUM(A3, A4)"));      // or use:      // range.SetFormula(COleVariant("=SUM(2,1)"));      // *** End of example for built-in function usage.      // Release dispatch pointers.      range.ReleaseDispatch();      sheet.ReleaseDispatch();      // This is not really necessary because      // the default second parameter of AttachDispatch releases      // when the current scope is lost.      } // End of processing.        catch(COleException *e)      {        char buf[1024];     // For the Try...Catch error message.        sprintf(buf, "COleException. SCODE: %08lx.", (long)e->m_sc);        ::MessageBox(NULL, buf, "COleException", MB_SETFOREGROUND | MB_OK);      }      catch(COleDispatchException *e)      {        char buf[1024];     // For the Try...Catch error message.        sprintf(buf,               "COleDispatchException. SCODE: %08lx, Description: \"%s\".",               (long)e->m_wCode,(LPSTR)e->m_strDescription.GetBuffer(512));        ::MessageBox(NULL, buf, "COleDispatchException",                           MB_SETFOREGROUND | MB_OK);      }      catch(...)      {        ::MessageBox(NULL, "General Exception caught.", "Catch-All",                           MB_SETFOREGROUND | MB_OK);      }					
Referências
Para obter informações adicionais sobre os aplicativos de automação do Office, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
222101Como: Localizar e usar a documentação do modelo de objeto do Office
MFC VC ++ automação typelib IDispatch ATP toolpack

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 178781 - Última Revisão: 12/05/2015 08:16:15 - Revisão: 4.2

Microsoft Foundation Class Library 4.2, Microsoft Excel 2002 Standard Edition

  • kbnosurvey kbarchive kbmt kbautomation kbhowto kbinterop KB178781 KbMtpt
Comentários