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.