Comment faire pour automatiser Excel à partir des MFC et Visual C++ 2005 ou Visual C++ .NET pour remplir ou obtenir des données dans une plage à l'aide de matrices

Traductions disponibles Traductions disponibles
Numéro d'article: 308407 - Voir les produits auxquels s'applique cet article
Pour une version de Microsoft Visual c# .NET de cet article, voir 302096.
Pour une version de Microsoft Visual Basic .NET de cet article, voir 302094.
note Microsoft Visual C++ 2005, Visual C++ .NET 2003 et Visual C++ .NET 2002 prennent en charge le modèle de code géré qui est fourni par Microsoft .NET Framework et le modèle de code Microsoft Windows natif non géré. Les informations dans cet article s'appliquent uniquement à Visual C++ non géré code.
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article étape par étape explique comment faire pour automatiser Microsoft Excel à partir de Visual C++ 2005 ou Visual C++ .NET pour remplir et récupérer les valeurs dans une plage de cellules à l'aide de matrices.

Création d'un client Automation pour Excel

Pour remplir une plage de cellules sans remplir les cellules une à la fois, vous pouvez définir la propriété Value d'un objet Range à un tableau à deux dimensions. De même, vous pouvez récupérer une matrice bidimensionnelle de valeurs pour plusieurs cellules à la fois à l'aide de la propriété Value . Les étapes suivantes montrent ce processus de configuration et de récupération des données de l'utilisation de matrices à deux dimensions.
  1. Suivez les étapes décrites dans la section « Création d'un client Automation » de l'article de base de connaissances Microsoft suivant à créer un client Automation base :
    307473 Comment faire pour utiliser une bibliothèque de types pour Office Automation à partir de Visual C++ .NET
    Dans l'étape 3, ajouter un bouton deuxième et une case à cocher au formulaire. Modifier le code du bouton IDC_GETVALUES et la légende à obtenir les valeurs . Modifier le code de la case à cocher pour IDC_CHECK et la légende à compléter avec des chaînes .

    Dans l'étape 4 de l'article, sélectionnez « Microsoft Excel 10.0 Object Library » si vous automatisez Excel 2002 de Microsoft Office XP. L'emplacement par défaut pour Excel 2002 est C:\Program Files\Microsoft Office\Office10\Excel.exe. Ou, sélectionnez « Microsoft Excel 11.0 Object Library » si vous automatisez Microsoft Office Excel 2003. L'emplacement par défaut pour Excel 2003 est C:\Program Files\Microsoft Office\Office11\Excel.exe. Sélectionnez les interfaces de Microsoft Excel suivantes :
    • _Application
    • _Workbook
    • _Worksheet
    • Plage
    • Classeurs
    • Feuilles de calcul
    Dans l'étape 6, ajoutez les instructions # inclure suivantes juste après la directive # pragma une seule fois dans autoprojectdlg.h :
    #include "CApplication.h"
    #include "CRange.h"
    #include "CWorkbook.h"
    #include "CWorkbooks.h"
    #include "CWorksheet.h"
    #include "CWorksheets.h"
    					
  2. Ajoutez les deux variables membres publics suivantes à la classe CAutoProjectDlg :
    CApplication oExcel;
    CWorkbook oBook;
    					
  3. Dans votre boîte de dialogue, cliquez avec le bouton droit sur IDC_CHECK et sélectionnez Ajouter une variable . Nom de la variable m_bFillWithStrings et cliquez sur Terminer .
  4. Sur votre boîte de dialogue, double-cliquez sur Exécuter et remplacez le code suivant
    void CAutoProjectDlg::OnBnClickedRun()
    {
    	// TODO: Add your control notification handler code here
    }
    					
    avec :
    void CAutoProjectDlg::OnBnClickedRun()
    {
    	CWorkbooks oBooks;
    	CWorksheets oSheets;
    	CWorksheet oSheet;
    	CRange oRange;
    	COleVariant covOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
    
    	// If you have not created Excel, create a new instance.
    	if (oExcel.m_lpDispatch == NULL) {
    		oExcel.CreateDispatch("Excel.Application");
    	}
    	// Show Excel to the user.
    	oExcel.put_Visible(TRUE);
    	oExcel.put_UserControl(TRUE);
    
    	// Add a new workbook and get the first worksheet in that book.
    	oBooks = oExcel.get_Workbooks();
    	oBook = oBooks.Add(covOptional);
    	oSheets = oBook.get_Worksheets();
    	oSheet = oSheets.get_Item(COleVariant((short)1));
    
    	// Get a range of data.
    	oRange = oSheet.get_Range(COleVariant("A1"),covOptional);
    	oRange = oRange.get_Resize(COleVariant((short)5),COleVariant((short)5));
    
    	COleSafeArray saRet;
    	DWORD numElements[2];
    	numElements[0] = 5;
    	numElements[1] = 5;
    
    	long index[2];
    	// Create a BSTR or double safe array.
    	if (m_bFillWithStrings.GetCheck())
    		saRet.Create(VT_BSTR,2,numElements);
    	else
    		saRet.Create(VT_R8,2,numElements);
    
    	// Fill the array with data.
    	for (int iRow = 1; iRow <= 5; iRow++) {
    		for (int iCol = 1; iCol <= 5; iCol++) {
    			index[0]=iRow-1;
    			index[1]=iCol-1;
    			if (m_bFillWithStrings.GetCheck()) {
    				CString szTemp;
    				szTemp.Format("%d|%d",iRow,iCol);
    				BSTR bstr = szTemp.AllocSysString();
    				saRet.PutElement(index,bstr);
    				SysFreeString(bstr);
    			} else {
    				double d = iRow * iCol;
    				saRet.PutElement(index,&d);
    			}
    		}
    	}
    	// Send the array to Excel.
    	oRange.put_Value(covOptional,COleVariant(saRet));
    }
    					
    Remarque dans Visual C++ 2005, vous devez ajouter le courants langue exécution prise en charge compilateur option ( /clr:oldSyntax ) pour compiler avec succès l'exemple de code précédent. Pour ajouter l'option langue runtime prise en charge compilateur courantes, procédez comme suit :
    1. Cliquez sur le projet , puis cliquez sur Propriétés ProjectName.

      note ProjectName est un espace réservé pour le nom du projet.
    2. Développez les propriétés de configuration , puis cliquez sur général .
    3. Dans le volet droit, cliquez pour sélectionner Common Language Runtime Support, l'ancienne syntaxe (/ clr:oldSyntax) dans le Common Language Runtime prend en charge les paramètres de projets.
    4. Cliquez sur Appliquer , puis cliquez sur OK .
    Pour plus d'informations sur la common language runtime prend en charge des options du compilateur, reportez-vous au site de Web) MSDN (Microsoft Developer Network suivant adresse :
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
    Ces étapes s'appliquent à l'article entier.
  5. Revenez à votre boîte de dialogue et double-cliquez sur obtenir les valeurs . Remplacez le code suivant
    void CAutoProjectDlg::OnBnClickedGetvalues()
    {
    	// TODO: Add your control notification handler code here
    }
    					
    avec :
    void CAutoProjectDlg::OnBnClickedGetvalues()
    {
    	CWorksheets oSheets;
    	CWorksheet oSheet;
    	CRange oRange;
    	COleVariant covOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
    
    	// Make sure that Excel has been started.
    	if (oExcel.m_lpDispatch == NULL) {
    		AfxMessageBox("Excel has not been started.  Press button1 to start Excel.");
    		return;
    	}
    	// Get the first worksheet.
    	oSheets = oBook.get_Worksheets();
    	oSheet = oSheets.get_Item(COleVariant((short)1));
    	// Set the range of data to retrieve
       	oRange = oSheet.get_Range(COleVariant("A1"),COleVariant("E5"));
    
    	// Get the data.
    	COleSafeArray saRet(oRange.get_Value(covOptional));
    
            long iRows;
            long iCols;
            saRet.GetUBound(1, &iRows);
            saRet.GetUBound(2, &iCols);
    
    	CString valueString = "Array Data:\r\n";
    	long index[2];
    	// Loop through the data and report the contents.
    	for (int rowCounter = 1; rowCounter <= iRows; rowCounter++) {
    		for (int colCounter = 1; colCounter <= iCols; colCounter++) {
    			index[0]=rowCounter;
    			index[1]=colCounter;		   
    			COleVariant vData;
    			saRet.GetElement(index,vData);
    			CString szdata(vData);
                valueString += szdata;
    			valueString += "\t";		
    		}
    		valueString += "\r\n";
    	}
    	AfxMessageBox(valueString,MB_SETFOREGROUND,NULL);
    }
    					

Test du client d'automation

  1. Appuyez sur F5 pour générer et exécuter l'exemple de programme.
  2. Cliquez sur Exécuter . Le programme démarre Excel avec un nouveau classeur et remplit les cellules A1: E5 de la feuille de calcul premier avec les données numériques à partir d'un tableau.
  3. Cliquez sur récupérer les valeurs . Le programme récupère les données des cellules A1: E5 dans une nouvelle matrice et affiche les résultats dans une boîte de message.
  4. Sélectionnez remplissage avec chaînes et cliquez sur Exécuter pour remplir des cellules A1: E5 avec les données de type string.
  5. Cliquez sur obtenir les valeurs pour afficher les valeurs de chaîne dans une boîte de message.

Résolution des problèmes

Si vous ajoutez des wrappers de classe pour la bibliothèque d'objet Excel à l'aide l'option de le classe de bibliothèque de types Assistant Ajout, vous pouvez recevoir un message d'erreur lorsque vous accédez à la bibliothèque d'objet. Pour éviter ce problème, tapez le nom chemin d'accès et fichier complet de la bibliothèque objet instead of naviguant sur le fichier. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
311408 BOGUE: 'en lecture seule' Avertissement lors de l'ajout de classes MFC de bibliothèque
Si vous recevez le message d'erreur suivant lorsque vous générez votre échantillon d'application, modifier « valeur de type Variant DialogBox » dans CRange.h à « valeur de type Variant _DialogBox » :
Avertissement C4003 : insuffisante paramètres réels de macro « DialogBoxA »
Pour plus d'informations sur la cause de cette erreur, consultez l'article suivant de la base de connaissances :
311407 BOGUE : Assistant MFC ne résolution de nom des conflits avec macros API

Références

Pour plus d'informations, consultez le développeur de Microsoft suivant site Web de Network (MSDN) :
Développement de Microsoft Office avec Visual Studio
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx
Pour plus d'informations sur l'utilisation de matrices pour définir et récupérer Excel des données avec les versions antérieures de Visual Studio, voir les suivants articles de base de connaissances :
186120 Comment faire pour utiliser MFC pour automatiser Excel et compléter une plage avec un tableau
186122 Comment faire pour utiliser MFC pour automatiser Excel et obtenir un tableau à partir d'une plage
247412 INFO : méthodes de transfert des données vers Excel à partir de Visual Basic

Propriétés

Numéro d'article: 308407 - Dernière mise à jour: mercredi 17 janvier 2007 - Version: 6.3
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Initiation
  • Microsoft Visual C++ .NET 2002 Initiation
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002
Mots-clés : 
kbmt kbautomation kbhowtomaster KB308407 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: 308407
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