Você está offline; aguardando reconexão

COMO: Usar MFC para copiar um conjunto de registros DAO para o Excel com a automação

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: 243394
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sumário
Microsoft Excel expõe o método CopyFromRecordset para um objeto Range copiar o conteúdo de um Recordset Data Access Objects (DAO) em uma planilha. Este artigo demonstra como você pode utilizar o MFC DAO para criar um conjunto de registros que você pode copiar, em seguida, para uma planilha do Excel usando automação.
Mais Informações
As etapas a seguintes demonstram como você pode obter um conjunto de registros de todos os os registros na tabela "Produtos" no exemplo de acesso a banco de dados Northwind.mdb e automatizar o Excel para copiar o conteúdo desse conjunto de registros em uma planilha. Embora este exemplo usa um banco de dados do Access para o seu conjunto de registros, você pode usar qualquer banco de dados para o qual você pode fornecer um ODBC seqüência de caracteres de conexão. Para obter detalhes sobre o uso fontes de dados ODBC com o DAO, consulte a Ajuda on-line do DAO do MFC.

Código de exemplo

  1. Inicie um novo projeto MFC AppWizard EXE dialog-based e nomeados AutoExcel .
  2. No menu Exibir , clique em ClassWizard (ou pressione CTRL+W ). Na guia de automação , clique em Add Class e escolha "De uma biblioteca de tipos". Navegue para localizar a biblioteca de tipos Excel (Excel8.olb para o Excel 97, Excel9.olb para o Excel 2000 ou Excel.Exe para Excel 2002 e Excel 2003).
    Observação : A biblioteca de tipo está localizada no diretório mesmo como o Excel executável.
  3. Adicionar todas as classes na biblioteca de tipos Excel ClassWizard apresenta.
  4. Adicione um botão denominado IDC_RUN para o recurso diálogo IDD_AUTOEXCEL_DIALOG e adicione o seguinte código ao manipulador de botão.
    void CAutoExcelDlg::OnRun() {    //For optional arguments    COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR);    CDaoDatabase db;    CDaoRecordset rs;    CString sConn;    long lNumCols;    //Get a recordset that represents all the records in the Products     //table of the sample Northwind database    sConn =      "C:\\Program Files\\Microsoft Office\\Office\\Samples\\Northwind.mdb";    db.Open(sConn, FALSE, FALSE);    rs.m_pDatabase = &db;        rs.Open(AFX_DAO_USE_DEFAULT_TYPE, "Select * From Products", 0);    lNumCols = rs.GetFieldCount();    //Start a new workbook in Excel    _Application oApp;    oApp.CreateDispatch("Excel.Application");    if (!oApp)    {        AfxMessageBox("Cannot start Excel");        return;    }    Workbooks oBooks = oApp.GetWorkbooks();    _Workbook oBook = oBooks.Add(vOpt);    Worksheets oSheets = oBook.GetWorksheets();    _Worksheet oSheet = oSheets.GetItem(COleVariant((short)1));    Range oRange;    //Transfer the data in the recordset to the worksheet    COleDispatchDriver rs2;    rs2.AttachDispatch((LPDISPATCH) rs.m_pDAORecordset);    oRange = oSheet.GetRange(COleVariant("A2"), vOpt);    oRange.CopyFromRecordset((LPUNKNOWN) rs2.m_lpDispatch, vOpt, vOpt);    rs2.DetachDispatch();    rs2.ReleaseDispatch();    //Add the field names to row 1    CDaoFieldInfo FieldInfo;    for(long i=0; i<=lNumCols-1;i++)    {        oRange = oSheet.GetRange(COleVariant("A1"), vOpt);        oRange = oRange.GetOffset(vOpt, COleVariant(i));        rs.GetFieldInfo(i, FieldInfo, AFX_DAO_PRIMARY_INFO);        oRange.SetValue(COleVariant(FieldInfo.m_strName));        // For Excel 2003, SetValue takes two parameters.       // oRange.SetValue(COleVariant(FieldInfo.m_strName),COleVariant());    }    //Format the worksheet    oRange = oSheet.GetRange(COleVariant("A1"), vOpt);    oRange = oRange.GetResize(COleVariant((short)1),                               COleVariant(lNumCols));    Font oFont = oRange.GetFont();    oFont.SetBold(COleVariant((short)TRUE));    oRange = oRange.GetEntireColumn();    oRange.AutoFit();    //Make Excel visible and give the user control    oApp.SetVisible(TRUE);    oApp.SetUserControl(TRUE);}						
  5. Inclua o arquivo de cabeçalho ClassWizard gerado da biblioteca de tipo do Excel para CAutoExcelDlg.cpp. Por exemplo:
        #include "excel8.h" /// For Excel 2003, use #include "excel.h"						
    Observação : adicionar essa diretiva após a inclusão de "Stdafx.h" evitar erros do compilador.
  6. Incluir o arquivo de cabeçalho para MFC DAO em StdAfx.h:
        #include <afxdao.h>						
  7. Modificar CAutoExcelApp::InitInstance em AutoExcel.cpp de modo que COM serviços são inicializados quando seu aplicativo for iniciado:
        if(!AfxOleInit())    {        AfxMessageBox("Cannot initialize COM services.");        return FALSE;    }    						
    Observação : Adicione este código antes da chamada para DoModal().
  8. Criar e executar o aplicativo.
  9. Clique no botão na caixa de diálogo. Quando o manipulador do botão for concluída, você verá o conteúdo da tabela Produtos do Northwind na primeira planilha de uma pasta de trabalho no Excel.

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 243394 - Última Revisão: 01/11/2015 03:08:23 - Revisão: 4.5

Microsoft Office Excel 2003, Microsoft Excel 2002 Standard Edition, Microsoft Excel 2000 Standard Edition, Microsoft Excel 97 Standard Edition, Microsoft Visual C++ 6.0 Professional Edition, Microsoft Visual C++ 5.0 Professional Edition

  • kbnosurvey kbarchive kbmt kbautomation kbhowto KB243394 KbMtpt
Comentários