Como utilizar MFC para automatizar o Excel e preencher um intervalo com uma matriz

Traduções de Artigos Traduções de Artigos
Artigo: 186120 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo demonstra como automatizar o Microsoft Excel e preencher um intervalo multi-cell com uma matriz de valores.

Mais Informação

Para preencher um intervalo multi-cell sem preencher as células uma a uma, terá de criar uma variante SEGURA que passar para o Excel por chamar a função DefinirValor para o objecto Range bidimensional. Os seguintes passos ilustram este processo.

Notas para automatizar o Microsoft Excel 2000 e 2002

O código de exemplo neste artigo utiliza wrappers de classe gerados a partir da biblioteca de objectos da Excel 97 (Excel 8.olb). Com ligeira modificação, este código pode ser aplicado a um cliente de automatização utiliza wrappers de classe para o Excel 2000 (Excel9.olb) ou o Excel 2002 (Excel.olb). Para informações adicionais sobre como utilizar o código de exemplo descrito neste artigo com o Microsoft Excel 2000 ou a biblioteca de tipos de 2002, clique no número de artigo existente abaixo para visualizá-lo na Microsoft Knowledge Base:
224925INFO: Bibliotecas de tipos para o Office podem alterar com nova versão

Passos para criar projecto

  1. Siga os passos 1 a 12 no seguinte artigo na Microsoft Knowledge Base para criar um projecto de exemplo que utiliza o IDispatch interfaces e funções de membro definidas na biblioteca de tipos Excel8.olb:
    178749Como criar um projecto de automatização com MFC e uma biblioteca de tipos
  2. Para a caixa de diálogo criada nos passos 4 e 5 do principal artigo 178749, adicione os seguintes controlos com propriedades conforme especificado. Também adicionar as variáveis de membro correspondente:
                                      Member                Member
          Control   Name              Variable Type         Variable Name
          -----------------------------------------------------------------
          Edit      IDC_STARTINGCELL  m_sStartingCell       CString
          Edit      IDC_NUMROWS       m_iNumRows            short
          Edit      IDC_NUMCOLS       m_iNumCols            short
          CheckBox  IDC_STRING        m_bFillWithStrings    BOOL
    					
  3. Na parte superior do ficheiro AutoProjectDlg.cpp, adicione a seguinte linha:
          #include "excel8.h"
    					
  4. Adicione o seguinte código ao CAutoProjectDlg::OnRun() no ficheiro 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 range;
    
          if(!UpdateData(TRUE))
          {
             return;
          }
    
          // Instantiate Excel and start a new workbook.
          objApp.CreateDispatch("Excel.Application");
          objBooks = objApp.GetWorkbooks();
          objBook = objBooks.Add(VOptional);
          objSheets = objBook.GetWorksheets();
          objSheet = objSheets.GetItem(COleVariant((short)1));
    
          //Get the range where the starting cell has the address
          //m_sStartingCell and it's dimensions are m_iNumRows x m_iNumCols.
          range = objSheet.GetRange(COleVariant(m_sStartingCell),
                                    COleVariant(m_sStartingCell));
          range = range.GetResize(COleVariant(m_iNumRows),
                                  COleVariant(m_iNumCols));
    
          //*** Fill the range with an array of values.
    
          //Create the SAFEARRAY.
          COleSafeArray saRet;
          DWORD numElements[2];
          numElements[0]= m_iNumRows;   //Number of rows in the range.
          numElements[1]= m_iNumCols;   //Number of columns in the range.
    
          if(m_bFillWithStrings)
          {
             saRet.Create(VT_BSTR, 2, numElements);
          }
          else
          {
             saRet.Create(VT_R8, 2, numElements);
          }
    
          //Fill the SAFEARRAY.
          long index[2];
          long iRow;
          long iCol;
    
          for(iRow=0;iRow<=m_iNumRows-1;iRow++)
          {
             for(iCol=0;iCol<=m_iNumCols-1;iCol++)
             {
                index[0] = iRow;
                index[1] = iCol;
                if(m_bFillWithStrings)      //Fill with Strings.
                {
                   VARIANT v;
                   CString s;
                   VariantInit(&v);
                   v.vt = VT_BSTR;
                   s.Format("r%dc%d", iRow, iCol);
                   v.bstrVal = s.AllocSysString();
                   saRet.PutElement(index, v.bstrVal);
                   SysFreeString(v.bstrVal);
                   VariantClear(&v);
                }
                else                     //Fill with Numbers.
                {
                   double d;
                   d = (iRow*1000) + iCol;
                   saRet.PutElement(index, &d);
                }
             }
          }
    
          //Set the range value to the SAFEARRAY.
          range.SetValue(COleVariant(saRet));
          saRet.Detach();
    
          //Return control of Excel to the user.
          objApp.SetVisible(TRUE);
          objApp.SetUserControl(TRUE);
    					
  5. Compilar e executar o projecto.
  6. Especificar os seguintes valores para os controlos na caixa de diálogo:
          Control               Contents
          ------------------------------
          IDC_STARTINGCELL      A1
          IDC_NUMROWS           10
          IDC_NUMCOLS           5
          IDC_STRING            True
    						
    clique em ' OK '.

    Resultados: Livro novo é gerado e A1:E10 células da primeira folha de cálculo são preenchidas com valores de cadeia.
  7. Especificar os seguintes valores para os controlos na caixa de diálogo:
          Control               Contents
          ------------------------------
          IDC_STARTINGCELL      C3
          IDC_NUMROWS           2
          IDC_NUMCOLS           9
          IDC_STRING            False
    						
    clique em ' OK '.

    Resultados: Livro novo é gerado e C3:K4 células da primeira folha de cálculo são preenchidas com valores numéricos.

Referências

Para mais informações sobre como automatizar o Microsoft Excel utilizando MFC, consulte os seguintes artigos na base de dados de conhecimento da Microsoft:
186122Como utilizar MFC para automatizar o Excel e obter uma matriz a partir de um intervalo

184663Como incorporar e automatizar a folha de cálculo Microsoft Excel com MFC

179706Utilizar MFC para automatizar o Excel e criar/formatar um novo livro

178781Como automatizar o Excel utilizar funções de folha de cálculo e MFC

178783Como utilizar MFC para criar um gráfico do Microsoft Excel

Propriedades

Artigo: 186120 - Última revisão: 23 de janeiro de 2007 - Revisão: 4.2
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 kbautomation kbcode kbhowto kbinterop KB186120 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 186120

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