Como usar o MFC para automatizar o Excel e preenchimento de um intervalo com uma matriz

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: 186120
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sumário
Este artigo demonstra como automatizar o Microsoft Excel e preencher um intervalo multi-cell com uma matriz de valores.
Mais Informações
Para preencher um intervalo multi-cell sem preencher as células um por um, você deve criar uma variante bidimensional SAFEARRAY que você passar para o Excel chamando a função DefinirValor para o objeto Range. As etapas a seguir ilustram esse processo.

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 lê-lo 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. 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 um projeto de automação com MFC e uma biblioteca de tipos
  2. Para a caixa de diálogo criada nas etapas 4 e 5 o pai artigo 178749, adicione os seguintes controles com propriedades como 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 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 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 projeto.
  6. Especifique os seguintes valores para os controles na caixa de diálogo:
          Control               Contents      ------------------------------      IDC_STARTINGCELL      A1      IDC_NUMROWS           10      IDC_NUMCOLS           5      IDC_STRING            True						
    clique em OK.

    Resultados: A nova pasta de trabalho é gerada e as células a1: E10 da primeira planilha são preenchidos com valores de seqüência de caracteres.
  7. Especifique os seguintes valores para os controles na caixa de diálogo:
          Control               Contents      ------------------------------      IDC_STARTINGCELL      C3      IDC_NUMROWS           2      IDC_NUMCOLS           9      IDC_STRING            False						
    clique em OK.

    Resultados: A nova pasta de trabalho é gerada e C3:K4 células da primeira planilha são preenchidos com valores numéricos.
Referências
Para obter mais informações sobre como automatizar o Microsoft Excel usando o MFC, consulte os seguintes artigos na Base de dados de Conhecimento da Microsoft:
186122Como usar o MFC para automatizar o Excel e obter uma matriz de um intervalo

184663Como incorporar e automatizar uma planilha do Microsoft Excel com MFC

179706Usar MFC para automatizar o Excel e criar/formatar uma nova pasta de trabalho

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

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

Propriedades

ID do Artigo: 186120 - Última Revisão: 12/05/2015 08:42:03 - Revisão: 4.2

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

  • kbnosurvey kbarchive kbmt kbautomation kbcode kbhowto kbinterop KB186120 KbMtpt
Comentários