Bonjour,


Je travaille avec Visual Studio 2005 et excel 20003.

J'ai une série de données Excel que je voudrais passer en paramètres à une matrice dans un programme C++.

J'ai trouvé une aide sur http://support.microsoft.com/kb/q186122

Ca se passe assez bien sauf que lorsque vient le moment d'ajouter la librairie "excel.h" .


Le compilateur me retourne plusieurs centaines d'erreur.
J'ai fait quelques tests en prenant seulement certaines classes (dont la class qui génère l'objet worksheet) contenu dans la librairy et la le nombre d'erreur diminue de manière conséquente. Ce qui me fait dire que c'est l'ajout de la librairy "excel.h" qui pose problème.

J'ai trouvé une autre façon d'intégrer excel avec la directive #import. En passant par la directive import le nombre d'erreur diminue, mais ça ne compile toujours pas. En tatonnant avec "rename", le nombre d'erreurs diminue. Mais il en reste beaucoup. Je ne sais pas où se trouvent les noms qui posent problème.
Est- ce que quelqu'un à une idée.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
#import "C:\Program Files\Common Files\Microsoft Shared\OFFICE11\mso.dll" rename("RGB", "MSRGB")
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" raw_interfaces_only, rename("Reference", "ignorethis"), rename("VBE", "testVBE")
#import "C:\Program Files\Microsoft Office\OFFICE11\excel.exe" exclude("IFont", "IPicture") rename("RGB", "ignorethis"), rename("DialogBox", "ignorethis"), rename("VBE", "testVBE"), rename("ReplaceText", "EReplaceText"), rename("CopyFile","ECopyFile"), rename("FindText", "EFindText"), rename("NoPrompt", "ENoPrompt")


Voici par ailleurs, une autre partie du code qui pourrait être utile.

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
 
 
 
 
 
void CAutoProject_07_04_2008Dlg::OnBnClickedRun()
{
	//OLE Variant for optional.
	ColeVariant VOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
 
	_Application objApp;
	_Workbook objBook;
	Workbooks objBooks;
    Worksheets objSheets;
	_Worksheet objSheet;
    Range objRange;
	Variant ret;
 
	objApp.CreateDispatch("Excel.Application");
	objBooks=objApp.GetWorkbooks();
	objBook=objBooks.Open("H:Test.xls",VOptional,VOptional,VOptional,VOptional,VOptional,VOptional,VOptional,VOptional,VOptional,VOptional,VOptional,VOptional);
	objSheets=objBook.GetWorksheets();
	objSheet=objSheets.GetItem(COleVaraint("A1"),COleVariant("C8"));
    ret=objRange.GetValue();
 
 
	// create and pass parameters to the SAFEARRAY from the VARIANT ret
 
	COleSafeArray sa(ret);
 
	long lNumRows;
	long lNumCols;
	sa.GetUBound(1,&lNumRows);
	sa.GetUBound(2,&lNumCols);
 
	//Display the elements in the SafeArray
 
	long index[2];
	VARIANT val;
	int r,c;
 
	TRACE("Contents of SafeArray\n");
	TRACE("======================\n\t");
 
	for (c=1;c<=lNumCols;c++)
	{
		TRACE("t\tCol %d",c);
	}
 
	TRACE("\n");
	for(r=1;r<=lNumCols;c++)
	{
		index[0]=r;
		index[1]=c;
		sa.GetElement(index,&val);
		switch(val.vt)
		{
		case VT_R8:
			{
				TRACE("\t\t%1.2f",val.dblVal);
				break;
			}
		case VT_BSTR:
			{
				TRACE("\t\t\%s",(CString)val.bstrVal);
				break;
			}
		case VT_EMPTY:
			{
				TRACE("\t\<empty>");
				break;
			}
		}
	}
	TRACE("\n");
J'imagine une solution qui consisterait à importer les objets que m'intéressent un par un, mais je ne suis pas sur de pouvoir en faire la liste. Je préfèrerais importer brutalement toute la librairy.

Merci d'avance pour votre aide.