So wird 's gemacht: Verwenden von MFC zum Kopieren von einem DAO-Recordset zu Excel mit Automatisierung

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 243394 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Zusammenfassung

Microsoft Excel stellt die CopyFromRecordset-Methode für ein Range-Objekt um den Inhalt eines Recordset-Objekts Datenzugriffsobjekte (DAO) in ein Arbeitsblatt kopieren. Dieser Artikel veranschaulicht die Verwendung MFC-DAO-ein Recordset erstellen, die Sie dann in eine Excel-Arbeitsblatt mithilfe der Automatisierung kopieren können.

Weitere Informationen

Die folgenden Schritte demonstrieren, wie Sie ein Recordset aller erhalten können die Datensätze in der Tabelle "Artikel" in diesem Beispiel Access-Datenbank Nordwind.mdb und Automatisieren Sie Excel, um den Inhalt des, Recordsets in ein Arbeitsblatt kopieren. Obwohl in diesem Beispiel wird eine Access-Datenbank für die Recordset verwendet wird, könnten Sie jede Datenbank, für die Sie eine ODBC-bereitstellen können, Verbindungszeichenfolge. Weitere Informationen zum Verwenden von ODBC-Datenquellen mit DAO finden Sie in der MFC-DAO-Onlinehilfe.

Beispielcode

  1. Starten Sie ein neues MFC AppWizard-Projekt, das Dialogfeld-basierten und mit dem Namen AutoExcel .
  2. Im Menü Ansicht klicken Sie auf Klassenassistenten (oder drücken Sie STRG + W ). Klicken Sie auf der Registerkarte Automatisierung auf Klasse hinzufügen , und wählen Sie "Von a Type Library". Navigieren Sie zu Excel-Typ Bibliothek (Excel8.olb für Excel 97), Excel9.olb für Excel 2000 oder Excel.Exe für Excel 2002 und Excel 2003.
    Hinweis : die Bibliothek Typ befindet sich im die gleichen Verzeichnis als der ausführbaren Excel.
  3. Fügen Sie alle Klassen, die in der Excel Typ Bibliothek, die Klassen-Assistent anzeigt.
  4. Fügen Sie einen Button namens von IDC_RUN, die Dialogfeldressource IDD_AUTOEXCEL_DIALOG und fügen Sie folgenden Code hinzu-Handler der Schaltfläche.
    
    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. Schließen Sie die Headerdatei, die Klassen-Assistenten aus der Excel-Typ-Bibliothek, CAutoExcelDlg.cpp generiert. Zum Beispiel:
        #include "excel8.h" /// For Excel 2003, use #include "excel.h"
    						
    Hinweis : Diese Direktive hinzufügen, nach der Include für "Stdafx.h", um Compilerfehler zu vermeiden.
  6. Schließen Sie die Headerdatei für MFC-DAO in StdAfx.h:
        #include <afxdao.h>
    						
  7. Ändern Sie CAutoExcelApp::InitInstance in AutoExcel.cpp, sodass COM-Dienste werden beim Start der Anwendung initialisiert:
        if(!AfxOleInit())
        {
            AfxMessageBox("Cannot initialize COM services.");
            return FALSE;
        }    
    						
    Hinweis : dieser Code vor dem Aufruf von DoModal() hinzufügen.
  8. Erstellen Sie die Anwendung, und führen Sie sie aus.
  9. Klicken Sie im Dialogfeld. Wenn der Ereignishandler der Schaltfläche abgeschlossen ist, sehen Sie den Inhalt der Tabelle Artikel aus der Nordwind im ersten Arbeitsblatt einer Arbeitsmappe in Excel.

Eigenschaften

Artikel-ID: 243394 - Geändert am: Donnerstag, 25. Januar 2007 - Version: 4.5
Die Informationen in diesem Artikel beziehen sich auf:
  • 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
Keywords: 
kbmt kbautomation kbhowto KB243394 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 243394
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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