HOWTO: Utilizzo di MFC per copiare un Recordset DAO in Excel con l'automazione

Traduzione articoli Traduzione articoli
Identificativo articolo: 243394 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

Sommario

Microsoft Excel espone il metodo CopyFromRecordset per un oggetto Range copiare il contenuto di un Recordset DAO (Data Access Objects) in un foglio di lavoro. Questo articolo viene illustrato come è possibile utilizzare DAO MFC per creare un recordset che è quindi possibile copiare un foglio di lavoro Excel utilizzando l'automazione.

Informazioni

I passaggi seguenti illustrano come è possibile ottenere un recordset di tutti i record della tabella "Prodotti" nell'esempio di Access database Northwind.mdb e quindi automatizzare Excel per copiare il contenuto di tale recordset in un foglio di lavoro. Sebbene in questo esempio venga utilizzato un database di Access per il recordset, è possibile utilizzare qualsiasi database per cui è possibile fornire un ODBC stringa di connessione. Per informazioni sull'utilizzo di origini dati ODBC con DAO, fare riferimento alla Guida in linea di DAO MFC.

Codice di esempio

  1. Avviare un progetto EXE la creazione guidata applicazione MFC nuovo basato su finestra di dialogo e denominato AutoExcel .
  2. Fare clic su Creazione guidata classe dal menu Visualizza oppure premere CTRL+W . Nella scheda automazione , fare clic su Aggiungi classe e scegliere "Da un Type Library". Cercare la libreria dei tipi Excel (Excel8.olb per Excel 97, Excel9.olb per Excel 2000 o Excel.Exe per Excel 2002 ed Excel 2003).
    Nota : la libreria dei tipi è trova nella directory stessa come il file eseguibile di Excel.
  3. Aggiungere tutte le classi nella libreria tipo Excel che presenta ClassWizard.
  4. Aggiungere un pulsante denominato IDC_RUN alla risorsa finestra di dialogo IDD_AUTOEXCEL_DIALOG e aggiungere il codice seguente al gestore del pulsante.
    
    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. Includere il file di intestazione classe generate dalla libreria dei tipi di Excel per CAutoExcelDlg.cpp. Ad esempio:
        #include "excel8.h" /// For Excel 2003, use #include "excel.h"
    						
    Nota : aggiungere questa direttiva dopo la direttiva include per "Stdafx.h" evitare gli errori del compilatore.
  6. Includere il file di intestazione per DAO di MFC in StdAfx.h:
        #include <afxdao.h>
    						
  7. Modificare CAutoExcelApp::InitInstance in AutoExcel.cpp in modo che i servizi COM vengono inizializzate all'avvio dell'applicazione:
        if(!AfxOleInit())
        {
            AfxMessageBox("Cannot initialize COM services.");
            return FALSE;
        }    
    						
    Nota : aggiungere il codice prima della chiamata a DoModal().
  8. Compilare ed eseguire l'applicazione.
  9. Fare clic sul pulsante nella finestra di dialogo. Al termine del gestore del pulsante, viene visualizzato il contenuto della tabella Products di Northwind nel primo foglio di lavoro di una cartella di lavoro in Excel.

Proprietà

Identificativo articolo: 243394 - Ultima modifica: giovedì 25 gennaio 2007 - Revisione: 4.5
Le informazioni in questo articolo si applicano 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
Chiavi: 
kbmt kbautomation kbhowto KB243394 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 243394
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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