COMO: Utilizar MFC para copiar um conjunto de registos DAO para o Excel com a automatização

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

Sumário

O Microsoft Excel expõe o método CopyFromRecordset para um objecto de intervalo copiar o conteúdo de um conjunto de registos Data Access Objects (DAO) numa folha de cálculo. Este artigo demonstra como pode utilizar MFC DAO para criar um conjunto de registos, em seguida, pode copiar para folha de cálculo do Excel utilizando a automatização.

Mais Informação

Os passos seguintes demonstram como pode obter um conjunto de registos de todos os registos na tabela "Produtos" do Access de exemplo da base de dados Adamastor.mdb e, em seguida, automatizar o Excel copia o conteúdo desse conjunto de registos numa folha de cálculo. Apesar deste exemplo utiliza uma base de dados do Access para o conjunto de registos, pode utilizar qualquer base de dados para o qual pode fornecer uma ODBC cadeia de ligação. Para obter detalhes sobre com origens de dados ODBC DAO, consulte a ajuda online do MFC DAO.

Código de exemplo

  1. Inicie um novo projecto EXE de AppWizard MFC é baseada no diálogo e nomeados AutoExcel .
  2. No menu Ver , clique em ClassWizard (ou prima CTRL+W ). No separador de automatização , clique em Adicionar classe e escolha "De uma biblioteca de tipos". Procure para localizar a biblioteca de tipo do Excel (Excel8.olb para o Excel 97, Excel9.olb para o Excel 2000 ou Excel.Exe para o Excel 2002 e Excel 2003).
    Nota : A biblioteca de tipos está localizada no directório mesmo como o Excel executável.
  3. Adicionar todas as classes na biblioteca de tipo Excel que apresenta ClassWizard.
  4. Adicionar um botão com o nome IDC_RUN para o recurso diálogo IDD_AUTOEXCEL_DIALOG e adicione o seguinte código o processador 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 ficheiro de cabeçalho ClassWizard geradas da biblioteca de tipo Excel para CAutoExcelDlg.cpp. Por exemplo:
        #include "excel8.h" /// For Excel 2003, use #include "excel.h"
    						
    Nota : adicionar esta directiva após a inclusão de "Stdafx.h" evitar erros do compilador.
  6. Incluir o ficheiro de cabeçalho para MFC DAO no StdAfx.h:
        #include <afxdao.h>
    						
  7. Modificar CAutoExcelApp::InitInstance em AutoExcel.cpp para que COM serviços são inicializados quando a aplicação é iniciada:
        if(!AfxOleInit())
        {
            AfxMessageBox("Cannot initialize COM services.");
            return FALSE;
        }    
    						
    Nota : Este código antes da chamada para DoModal() adicionar.
  8. Criar e executar a aplicação.
  9. Clique no botão na caixa de diálogo. Quando a rotina de tratamento botão estiver concluída, poderá ver o conteúdo da tabela produtos de base de dados Adamastor na primeira folha de cálculo de um livro no Excel.

Propriedades

Artigo: 243394 - Última revisão: 25 de janeiro de 2007 - Revisão: 4.5
A informação contida neste artigo aplica-se a:
  • 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
Palavras-chave: 
kbmt kbautomation kbhowto KB243394 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: 243394

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