Pour travailler avec les fichiers Excel nous avons besoin de choisir la version d'Excel adéquate avec laquelle on peut s'en servir comme serveur d'automation.
Mais il faut remarquer que les applications d'Office (Word, Excel, PowerPoint,...) partagent une libraire commune des composants qui se trouve dans la mso.dll et dont il faut également tenir compte de sa version ainsi que du support VBA qui se trouve empaqueté dans la librairie de type VBE6EXT.OLB

Ici j'utilise la directive #import pour importer les composants d'Excel dans une application tierce.
Mais premièrement importons les composants offices de bases

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
 
// Define this according to the Microsoft Office Object Model version you are compiling under
//#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(OFFICE12)	// Office 2007
 
#ifndef FRA
	#import "C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE12\\mso.dll" \
		rename_namespace("Office") \
		auto_rename
#else
	#import "C:\\Program Files\\Fichiers communs\\Microsoft Shared\\OFFICE12\\mso.dll" \
		rename_namespace("Office") \
		auto_rename
#endif
 
#elif defined(OFFICE11)	// Office 2003
 
#ifndef FRA
	#import "C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE11\\mso.dll" \
		rename_namespace("Office") \
		auto_rename
#else
	#import "C:\\Program Files\\Fichiers communs\\Microsoft Shared\\OFFICE11\\mso.dll" \
		rename_namespace("Office") \
		auto_rename
#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
	#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB" \
		rename_namespace("VBA") \
		auto_rename
#else
	#import "C:\\Program Files\\Fichiers communs\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB" \
		rename_namespace("VBA") \
		auto_rename
#endif
 
#endif // VBA6
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
 
// Define this according to the Excel Object Model version you are compiling under
//#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(EXCEL12) // Excel 2007
 
#define EXCEL_APPLICATION_2007	"Excel.Application.12"
#define OFFICE12
#define VBA6
#include "..\Mcn.Office\OfficeImport.h"
 
#import "D:\\Program Files\\Microsoft Office\\OFFICE12\\Excel.EXE" \
	rename_namespace("Excel") \
	auto_rename \
	include("IFont", "IPicture")
 
#elif defined(EXCEL11) // Excel 2003
 
#define EXCEL_APPLICATION_2003	"Excel.Application.11"
#define OFFICE11
#define VBA6
#include "..\Mcn.Office\OfficeImport.h"
 
#import "C:\\Program Files\\Microsoft Office\\OFFICE11\\Excel.EXE" \
	rename_namespace("Excel") \
	auto_rename \
	include("IFont", "IPicture")
 
#elif defined(EXCEL10) // Excel 2002
 
#define EXCEL_APPLICATION_2002	"Excel.Application.10"
#define OFFICE10
#define VBA6
#include "..\Mcn.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 "..\Mcn.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 "..\Mcn.Office\OfficeImport.h"
 
#import "C:\\Program Files\\Microsoft Office\\Office\\Excel8.olb" \
	rename_namespace("Excel") \
	auto_rename
 
#endif // EXCEL12
 
//#pragma warning(default:4146)
Si je veux utiliser la version d'excel 2007 j'ai
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
#define EXCEL12	// use MS Excel 2007
//#define FRA
#include "ExcelImport.h"
le #define FRA est pour spécifier que la librairie mso.dll se trouve dans le sous répertoire "Fichiers communs" de "Program Files" et non dans "Common Files".

La directive import du compilo nous génère les fichiers excel.tlh et excel.tli dans notre namespace "Excel", mso.tlh et mso.tli dans notre namespace "Office", et vbe6ext.tlh et vbe6ext.tli dans notre namespace "VBA"

Voir aussi Questions sur la manipulation de fichiers Excel avec Visual C++