IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

De Excel 2007 => Visual C++


Sujet :

Visual C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Inscrit en
    Novembre 2010
    Messages
    176
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 176
    Par d�faut De Excel 2007 => Visual C++
    Bonjour �

    Je m�int�resse au C++ et aux stats et � la mod�lisation financi�re.

    Je souhaite utiliser Excel 2007 comme source de s�ries historiques (de prix � ) , je pourrai alors manipuler ces donn�es avec C++ (j�utilise Visual C++ Express 2010). (NON ! je ne souhaite pas faire autrement ;-) )

    J�ai lu diff�rentes choses sur le sujet et d�autres pas tout � fait sur le sujet (les livres de Steve Dalton sur les add-ins et autres d�veloppements pour Excel). Mais je me pose toujours des tas de questions.

    Je ne souhaite pas compliquer dans un premier, en cr�ant l�interface COM.
    Je pense lire mes donn�es dans Excel et les importer sous forme de vectors.

    Le fichier Excel que je souhaite lire, pour la d�mo s�appelle : C:\Users\�douard\Desktop\test.xlsx
    Son contenu, 3 colonnes (� partir de �A1�):

    2 6 6
    2 2 4
    3 4 4
    5 4 5
    3 4 1
    6 1 2
    2 3 8
    9 5 8
    1 7 7


    Voici le d�but de mon code (le tout d�but pourra �tre utile � d�autres � ) :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #include <iostream>
    #include <fstream>
    #include<stdio.h>
    #include <cstdlib>
    #include <vector>
     
    using namespace std;
     
    // Microsoft Office Objects
    #import \
    "C:\Program Files\Common Files\Microsoft Shared\OFFICE12\mso.dll" \
    rename("DocumentProperties", "DocumentPropertiesXL") \
    rename("RGB", "RBGXL")
     
    using namespace Office;
     
    // Microsoft VBA Objects
    #import \
    "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\vbe6ext.olb"
     
    using namespace VBIDE;
     
    // Excel Application Objects
    #import \
    "C:\Program Files\Microsoft Office\OFFICE12\EXCEL.EXE" \
    rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") \
    rename("DocumentProperties", "DocumentPropertiesXL") \
    rename("ReplaceText", "ReplaceTextXL") \
    rename("CopyFile", "CopyFileXL") \
    exclude("IFont", "IPicture") no_dual_interfaces
     
     
    // convertir les ranges excel en vectors
    vector<double>ExcelRangeTovector(Excel::RangePtr pRange)
    {
         // obtenir le colonnes et les lignes utilisées
         int columns=pRange->Columns->Count;
         int rows=pRange->Rows->Count;
     
         // création du vecteur à la bonne taille
         vector<double> v(columns*rows);
     
         // boucle pour remplir le vecteur
         int index=0;
         for (int r=1; r<=rows; r++)
         {
              for (int c=1; c<=columns; c++)
              {
                   // remplir le vector
                   v[index++]=(((Excel::RangePtr) pRange->Item[r][c])->Value).dblVal;
              }
         }
     
         // obtenir le vector
         return v;
    }

    A partir de ceci, qui rassemble les id�es tir�es de plusieurs ressources sur internet.

    Je me demande dans quelle mesure (jusqu�� o� ?) il faut pointer dans ma feuille Excel. Je ne sais pas non plus s�il est n�cessaire d� �activer� . Enfin, je ne parviens pas � bien utiliser la classe ExcelRangeTovector �crite au-dessus.

    Le d�but de ma main est comme ceci :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    int main ()
    {
    //try
    //	{
    	//initialisation interface COM
    	CoInitialize(NULL);
    	//Pointeur vers Excel 2007
    	Excel::_ApplicationPtr XL;
    	//Session d�excel
    	XL.CreateInstance(L"Excel.Application");
    	//Excel visible ?
    	XL->Visible = false;
    	// pointeur vers le fichier Excel d�sir�
    	XL->Workbooks->Open(L"C:\\Users\\�douard\\Desktop\\test.xlsx");
    	//pointeur vers la premi�re worksheet
    	Excel::_WorksheetPtr pSheet = XL->Sheets->Item[1];
    	// Activation de la 1�re feuille
    	pSheet->Activate();
    	// Pointeur vers les cellules sur la feuille active (ici, la 1�re)
    	Excel::RangePtr pRange = pSheet->Cells;
    	pSheet->Activate();
    	// obtenir le vector dans c++ ???
    	
     �. C�EST L� QUE JE NE PARVIENS PAS � MES FINS !!!  COMMENT OBTENIR EFFECTIVEMENT LES CELLULES EXCEL DANS UN VECTEUR ??? COMMENT AFFICHER LE VECTEUR � L��CRAN (COMMENT UTILISER COUT ? ?
    
    
    
    	// Quitter l�application
    	xl->Quit();
    	}
    	//si erreur, le faire savoir !
    	catch(_com_error &error)
    	}
    }

    Quelqu�un aurait-il des id�es ?
    Quelqu�un pourrait-il expliquer p�dagogiqument ?

    Merci
    Edouard.

  2. #2
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Bonjour
    Je peux t'aider p�dagogiquement
    mais �a sera un peu long
    Veux-tu?

  3. #3
    Membre confirm�
    Inscrit en
    Novembre 2010
    Messages
    176
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 176
    Par d�faut oui !
    oui oui, je suis preneur de vos explications. en fait, je souhaite bien comprendre comment le transfert excel => visual c++ . j'esp�re que �� ne vous prendra pas trop de votre temps. merci.

  4. #4
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Es-tu famillier avec les MFC?

  5. #5
    Membre confirm�
    Inscrit en
    Novembre 2010
    Messages
    176
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 176
    Par d�faut ...
    j'ai lu sur le sujet et pratiqu� peu ..
    je tourne avec la version express de visual c++ .
    tout ce qui est ATL et MFC est plut�t limit� (� moins de bidouiller avec DDK de microsoft, mais �� devient compliqu� ...)

  6. #6
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Bien, mon intervention sera un peu limit� mais commence par ajouter deux petits fichiers � ton projet.

    Le fichier OfficeImport.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
     
    // Define this according to the Microsoft Office Object Model version you are compiling under
    //#define OFFICE14				// MS Office 2010
    //#define OFFICE12				// MS Office 2007
    //#define OFFICE11				// MS Office 2003
    //#define OFFICE10				// MS Office 2002
    //#define OFFICE9				// MS Office 2000
    //#define OFFICE8				// MS Office 1997
     
    #if defined(OFFICE14)	// Office 2010
     
    #ifndef FRA
    	#ifndef Program_Files_x86
    		#import "C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE14\\mso.dll" \
    			rename_namespace("Office") \
    			auto_rename
    	#else
    		#import "D:\\Program Files (x86)\\Common Files\\Microsoft Shared\\OFFICE14\\mso.dll" \
    			rename_namespace("Office") \
    			auto_rename
    	#endif
    #else
    	#ifndef Program_Files_x86
    		#import "C:\\Program Files\\Fichiers communs\\Microsoft Shared\\OFFICE14\\mso.dll" \
    			rename_namespace("Office") \
    			auto_rename
    	#else
    		#import "C:\\Program Files (x86)\\Fichiers communs\\Microsoft Shared\\OFFICE14\\mso.dll" \
    			rename_namespace("Office") \
    			auto_rename
    	#endif
    #endif
     
    #elif defined(OFFICE12)	// Office 2007
     
    #ifndef FRA
    	#ifndef Program_Files_x86
    		#import "C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE12\\mso.dll" \
    			rename_namespace("Office") \
    			auto_rename
    	#else
    		#import "D:\\Program Files (x86)\\Common Files\\Microsoft Shared\\OFFICE12\\mso.dll" \
    			rename_namespace("Office") \
    			auto_rename
    	#endif
    #else
    	#ifndef Program_Files_x86
    		#import "C:\\Program Files\\Fichiers communs\\Microsoft Shared\\OFFICE12\\mso.dll" \
    			rename_namespace("Office") \
    			auto_rename
    	#else
    		#import "C:\\Program Files (x86)\\Fichiers communs\\Microsoft Shared\\OFFICE12\\mso.dll" \
    			rename_namespace("Office") \
    			auto_rename
    	#endif
    #endif
     
    #elif defined(OFFICE11)	// Office 2003
     
    #ifndef FRA
    	#ifndef Program_Files_x86
    		#import "C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE11\\mso.dll" \
    			rename_namespace("Office") \
    			auto_rename
    	#else
    		#import "C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\OFFICE11\\mso.dll" \
    			rename_namespace("Office") \
    			auto_rename
    	#endif
    #else
    	#ifndef Program_Files_x86
    		#import "C:\\Program Files\\Fichiers communs\\Microsoft Shared\\OFFICE11\\mso.dll" \
    			rename_namespace("Office") \
    			auto_rename
    	#else
    		#import "C:\\Program Files (x86)\\Fichiers communs\\Microsoft Shared\\OFFICE11\\mso.dll" \
    			rename_namespace("Office") \
    			auto_rename
    	#endif
    #endif
     
    #elif defined(OFFICE10) // Office 2002
     
    #ifndef FRA
    	#import "C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE10\\mso.dll" \
    		rename_namespace("Office"), rename("DocumentProperties", "DocProps")
    #else
    	#import "C:\\Program Files\\Fichiers communs\\Microsoft Shared\\OFFICE10\\mso.dll" \
    		rename_namespace("Office"), rename("DocumentProperties", "DocProps")
    #endif
     
    #elif defined(OFFICE9)	// Office 2000
    	#import "C:\\Program Files\\Microsoft Office\\Office\\mso9.dll" \
    		rename_namespace("Office"), rename("DocumentProperties", "DocProps")
     
    #elif defined (OFFICE8) // Office 1997
    	#import "C:\\Program Files\\Microsoft Office\\Office\\mso97.dll" \
    		rename_namespace("Office"), rename("DocumentProperties", "DocProps")
     
    #endif // OFFICE12
     
    #if defined(VBA6)	// VBA 6
     
    #ifndef FRA
    	#ifndef Program_Files_x86
    		#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB" \
    			rename_namespace("VBA") \
    			auto_rename
    	#else
    		#import "C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB" \
    			rename_namespace("VBA") \
    			auto_rename
    	#endif	
    #else
    	#ifndef Program_Files_x8
    		#import "C:\\Program Files\\Fichiers communs\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB" \
    			rename_namespace("VBA") \
    			auto_rename
    	#else
    		#import "C:\\Program Files (x86)\\Fichiers communs\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB" \
    			rename_namespace("VBA") \
    			auto_rename
    	#endif
    #endif
     
    #endif // VBA6
    et le fichier ExcelImport.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
    // Define this according to the Excel Object Model version you are compiling under
    //#define EXCEL14				// Excel 2010
    //#define EXCEL12				// Excel 2007
    //#define EXCEL11				// Excel 2003
    //#define EXCEL10				// Excel 2002
    //#define EXCEL9				// Excel 2000
    //#define EXCEL8				// Excel 1997
     
    //#pragma warning(disable:4146)
     
    #define EXCEL_APPLICATION	"Excel.Application"
     
    #if defined(EXCEL14) // Excel 2010
     
    #define EXCEL_APPLICATION_2010	"Excel.Application.14"
    #define OFFICE14
    #define VBA6
    #include "..\Aks.Office\OfficeImport.h"
     
    #ifndef Program_Files_x86
    	#import "C:\\Program Files\\Microsoft Office\\OFFICE14\\Excel.EXE" \
    		rename_namespace("Excel") \
    		auto_rename \
    		include("IFont", "IPicture")
    #else
    	#import "C:\\Program Files (x86)\\Microsoft Office\\OFFICE14\\Excel.EXE" \
    		rename_namespace("Excel") \
    		auto_rename \
    		include("IFont", "IPicture")
    #endif
     
    #elif defined(EXCEL12) // Excel 2007
     
    #define EXCEL_APPLICATION_2007	"Excel.Application.12"
    #define OFFICE12
    #define VBA6
    #include "..\Aks.Office\OfficeImport.h"
     
    #ifndef Program_Files_x86
    	#import "C:\\Program Files\\Microsoft Office\\OFFICE12\\Excel.EXE" \
    		rename_namespace("Excel") \
    		auto_rename \
    		include("IFont", "IPicture")
    #else
    	#import "C:\\Program Files (x86)\\Microsoft Office\\OFFICE12\\Excel.EXE" \
    		rename_namespace("Excel") \
    		auto_rename \
    		include("IFont", "IPicture")
    #endif
     
    #elif defined(EXCEL11) // Excel 2003
     
    #define EXCEL_APPLICATION_2003	"Excel.Application.11"
    #define OFFICE11
    #define VBA6
    #include "..\Aks.Office\OfficeImport.h"
     
    #ifndef Program_Files_x86
    	#import "C:\\Program Files\\Microsoft Office\\OFFICE11\\Excel.EXE" \
    		rename_namespace("Excel") \
    		auto_rename \
    		include("IFont", "IPicture")
    #else
    	#import "C:\\Program Files (x86)\\Microsoft Office\\OFFICE11\\Excel.EXE" \
    		rename_namespace("Excel") \
    		auto_rename \
    		include("IFont", "IPicture")
    #endif
     
    #elif defined(EXCEL10) // Excel 2002
     
    #define EXCEL_APPLICATION_2002	"Excel.Application.10"
    #define OFFICE10
    #define VBA6
    #include "..\Aks.Office\OfficeImport.h"
     
    #import "C:\\Program Files\\Microsoft Office\\OFFICE10\\Excel.EXE" \
    	rename_namespace("Excel") \
    	auto_rename
     
    #elif defined(EXCEL9) // Excel 2000
     
    #define EXCEL_APPLICATION_2000	"Excel.Application.9"
    #define OFFICE9
    #define VBA6
    #include "..\Aks.Office\OfficeImport.h"
     
    #import "C:\\Program Files\\Microsoft Office\\Office\\Excel9.olb" \
    	rename_namespace("Excel") \
    	auto_rename
     
    #elif defined(EXCEL8) // Excel 1997
     
    #define EXCEL_APPLICATION_1997	"Excel.Application.8"
    #define OFFICE8
    #define VBA6
    #include "..\Aks.Office\OfficeImport.h"
     
    #import "C:\\Program Files\\Microsoft Office\\Office\\Excel8.olb" \
    	rename_namespace("Excel") \
    	auto_rename
     
    #endif // EXCEL12
     
    //#pragma warning(default:4146)
    Ces deux fichiers doivent dans un premier tant te permettre de r�f�rencer la bonne version d'excel que tu souhaites utiliser.

    Fais correspond les path avec ce que tu as chez toi de l'installation de ton MS Office

    Le fichier ExcelImport fait r�f�rence au fichier OfficeImport v�rfie donc aussi le path appropri�

    Si tu es pr�t signale moi

Discussions similaires

  1. R�ponses: 4
    Dernier message: 05/12/2019, 13h16
  2. R�ponses: 7
    Dernier message: 01/06/2013, 06h50
  3. R�ponses: 0
    Dernier message: 13/05/2013, 16h21
  4. Faire fonctionner des objets d'Excel 2007 sur Excel 2003 ?
    Par brunoperel dans le forum Macros et VBA Excel
    R�ponses: 5
    Dernier message: 08/12/2006, 20h52
  5. D'Excel � Access par Visual Basic 6.0
    Par moane dans le forum Macros et VBA Excel
    R�ponses: 4
    Dernier message: 12/04/2006, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo