Comment faire pour utiliser MFC pour copier un jeu d'enregistrements DAO dans Excel avec Automation

Traductions disponibles Traductions disponibles
Numéro d'article: 243394 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Résumé

Microsoft Excel expose la méthode CopyFromRecordset pour un objet Range copier le contenu d'un objet Recordset DAO (Data Access Objects) sur une feuille de calcul. Cet article explique comment vous pouvez utiliser DAO MFC pour créer un jeu d'enregistrements que vous pouvez ensuite copier vers une feuille de calcul Excel à l'aide de l'automation.

Plus d'informations

Les étapes suivantes montrent comment vous pouvez obtenir un jeu d'enregistrements de tous les enregistrements dans la table « Produits » dans l'exemple Access Comptoir.mdb la base de données et puis automatiser Excel pour copier le contenu de ce jeu d'enregistrements sur une feuille de calcul. Bien que cet exemple utilise une base de données Access pour son jeu d'enregistrements, vous pouvez utiliser une base de données pour laquelle vous pouvez fournir une ODBC chaîne de connexion. Pour plus de détails sur avec des sources de données ODBC DAO, consultez l'aide en ligne MFC DAO.

Exemple de code

  1. Démarrer un nouveau projet MFC AppWizard EXE qui est basé boîte de dialogue nommée AutoExcel .
  2. Dans le menu Affichage , cliquez sur ClassWizard (ou appuyez sur CTRL + W ). Sous l'onglet Automation , cliquez sur Ajouter une classe et choisissez « d'une bibliothèque de types ». Accédez à trouver la bibliothèque de type Excel (Excel8.olb pour Excel 97), Excel9.olb pour Excel 2000 ou Excel.Exe Excel 2002 des Excel 2003.
    Remarque : la bibliothèque de type se trouve dans le même répertoire que le Excel exécutable.
  3. Ajouter toutes les classes dans la bibliothèque de type Excel qui présente ClassWizard.
  4. Ajouter un bouton appelé IDC_RUN à la ressource de boîte de dialogue IDD_AUTOEXCEL_DIALOG et ajoutez le code suivant au gestionnaire de bouton.
    
    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. Inclure le fichier en-tête ClassWizard généré à partir de la bibliothèque de type Excel pour CAutoExcelDlg.cpp. Par exemple :
        #include "excel8.h" /// For Excel 2003, use #include "excel.h"
    						
    Remarque : ajouter cette directive après le include pour stdafx.h éviter les erreurs du compilateur.
  6. Inclure le fichier en-tête pour MFC DAO dans StdAfx.h :
        #include <afxdao.h>
    						
  7. Modifier CAutoExcelApp::InitInstance dans AutoExcel.cpp sorte que les services COM sont initialisés lorsque votre application démarre :
        if(!AfxOleInit())
        {
            AfxMessageBox("Cannot initialize COM services.");
            return FALSE;
        }    
    						
    Remarque : ajouter ce code avant l'appel de DoModal().
  8. Générez et exécutez l'application.
  9. Cliquez sur le bouton de la boîte de dialogue. Lorsque le gestionnaire de bouton a terminé, vous verrez le contenu de la table produits de Northwind dans la première feuille de calcul d'un classeur dans Excel.

Propriétés

Numéro d'article: 243394 - Dernière mise à jour: jeudi 25 janvier 2007 - Version: 4.5
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002
  • Microsoft Excel 2000 Standard
  • Microsoft Excel 97 Standard
  • Microsoft Visual C++ 6.0 Édition Professionnelle
  • Microsoft Visual C++ 5.0 Édition Professionnelle
Mots-clés : 
kbmt kbautomation kbhowto KB243394 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 243394
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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