Como usar MFC para automatizar Excel 2000 e Excel 2002 e obter uma matriz de um intervalo no Excel 2000 e no Excel 2002

Traduções deste artigo Traduções deste artigo
ID do artigo: 186122 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo demonstra como automatizar o Microsoft Excel e retornar os valores de um intervalo multi-cell a uma matriz.

Mais Informações

Para retornar os valores de um intervalo multi-cell sem consultar células um por um, você deve usar a função de membro GetValue do objeto Range para retornar os valores para uma VARIANT. Você então, construir uma SAFEARRAY com base em VARIANT retornado de GetValue. Depois de ter o SAFEARRAY, você pode acessar os elementos usando GetElement. As etapas a seguir ilustram esse processo e demonstram como é possível acessar elementos numéricos e de seqüência de caracteres.

Notas para automatizar o Microsoft Excel 2000 e 2002

O código de exemplo neste artigo usa wrappers de classe gerados a partir de biblioteca de objetos da Excel 97 (Excel 8.olb). Com pequenas modificações, esse código pode ser aplicado a um cliente de automação que usa wrappers de classe para o Excel 2000 (Excel9.olb) ou o Excel 2002 (Excel.olb). Para obter informações adicionais sobre como usar o código de exemplo descrito neste artigo com o Microsoft Excel 2000 ou uma biblioteca de tipos de 2002, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
224925INFO: Bibliotecas de tipos para o Office podem alterar com a nova versão

Etapas para criar projeto

  1. No Microsoft Excel, crie uma nova pasta de trabalho. Preencher células A1:C8 com uma combinação de seqüência de caracteres e dados numéricos. Salve a pasta de trabalho como "c:\test.xls" e saia do Microsoft Excel.
  2. Siga as etapas 1 a 12 no seguinte artigo na Base de dados de Conhecimento da Microsoft para criar um projeto de exemplo que usa o IDispatch interfaces e funções de membro definidas na biblioteca de tipos Excel8.olb:
    178749Como criar projeto de automação com MFC e uma biblioteca de tipos
  3. Na parte superior do arquivo AutoProjectDlg.cpp, adicione a seguinte linha:
          #include "excel8.h"
    					
  4. Adicione o seguinte código para CAutoProjectDlg::OnRun() no arquivo AutoProjectDlg.cpp:

    Código de exemplo

          // OLE Variant for Optional.
          COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    
          _Application objApp;
          _Workbook objBook;
          Workbooks objBooks;
          Worksheets objSheets;
          _Worksheet objSheet;
          Range objRange;
          VARIANT ret;
    
          // Instantiate Excel and open an existing workbook.
          objApp.CreateDispatch("Excel.Application");
          objBooks = objApp.GetWorkbooks();
          objBook = objBooks.Open("C:\\Test.xls",
                    VOptional, VOptional, VOptional, VOptional,
                    VOptional, VOptional, VOptional, VOptional,
                    VOptional, VOptional, VOptional, VOptional);
          objSheets = objBook.GetWorksheets();
          objSheet = objSheets.GetItem(COleVariant((short)1));
    
          //Get the range object for which you wish to retrieve the
          //data and then retrieve the data (as a variant array, ret).
          objRange = objSheet.GetRange(COleVariant("A1"), COleVariant("C8"));
          ret = objRange.GetValue();
    
          //Create the SAFEARRAY from the VARIANT ret.
          COleSafeArray sa(ret);
    
          //Determine the array's dimensions.
          long lNumRows;
          long lNumCols;
          sa.GetUBound(1, &lNumRows);
          sa.GetUBound(2, &lNumCols);
    
          //Display the elements in the SAFEARRAY.
          long index[2];
          VARIANT val;
          int r, c;
          TRACE("Contents of SafeArray\n");
          TRACE("=====================\n\t");
          for(c=1;c<=lNumCols;c++)
          {
             TRACE("\t\tCol %d", c);
          }
          TRACE("\n");
          for(r=1;r<=lNumRows;r++)
          {
             TRACE("Row %d", r);
             for(c=1;c<=lNumCols;c++)
             {
                index[0]=r;
                index[1]=c;
                sa.GetElement(index, &val);
                switch(val.vt)
                {
                case VT_R8:
                   {
                      TRACE("\t\t%1.2f", val.dblVal);
                      break;
                   }
                case VT_BSTR:
                   {
                      TRACE("\t\t%s",(CString)val.bstrVal);
                      break;
                   }
    
                case VT_EMPTY:
                   {
                      TRACE("\t\t<empty>");
                      break;
                   }
                }
             }
             TRACE("\n");
          }
    
          //Close the workbook without saving changes
          //and quit Microsoft Excel.
          objBook.Close(COleVariant((short)FALSE), VOptional, VOptional);
          objApp.Quit();
    					
  5. Compile o projeto e executá-lo.
  6. Clique em executar. Os valores em células A1:C8 são exibidos na janela Output.

Referências

Para obter informações adicionais sobre como automatizar o Microsoft Excel usando o MFC, por favor clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
186120Como usar o MFC para automatizar o Excel e preenchimento de um intervalo com uma matriz
184663Como incorporar e automatizar uma planilha do Microsoft Excel com MFC
179706Como usar o MFC para automatizar o Excel e criar/formato uma nova pasta de trabalho
178781COMO: Automatizar Excel usando funções de planilha e MFC
178783COMO: Utilizar a MFC para criar um gráfico do Microsoft Excel
167668Como passar uma SafeArray de seqüências de caracteres em um VARIANT 1

Propriedades

ID do artigo: 186122 - Última revisão: terça-feira, 23 de janeiro de 2007 - Revisão: 5.1
A informação contida neste artigo aplica-se a:
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 97 Standard Edition
Palavras-chave: 
kbmt kbprogramming kbfunctions kbautomation kbhowto kbinterop KB186122 KbMtpt
Tradução automática
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: 186122

Submeter comentários

 

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