Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUMS DELPHI F.A.Q DELPHI TUTORIELS DELPHI LIVRES COMPOSANTS SOURCES DEFI TELECHARGEZ DELPHI TV

Pilotage OLE d'Excel à partir de Delphi

10/11/2002

Par LFE (autres articles)
 

Ce document a pour but de présenter le pilotage OLE d'Excel depuis une application Delphi


Avant-Propos
1. Démarrer Excel
1.1. Ouvrir une nouvelle instance
1.2. Se connecter à une instance existante
2. Fermer Excel
3. Créer un nouveau classeur
4. Ouvrir un classeur existant
4.1. Ouvrir un classeur simple
4.2. Ouvrir un classeur en lecture seule
4.3. Ouvrir un fichier csv
5. Enregistrer un classeur
5.1. Enregistrer le classeur sous le même nom
5.2. Enregistrer le classeur sous un autre nom
6. Fermer un classeur
7. Accéder à une feuille de calcul
8. Accéder à une cellule
9. Lire la valeur d'une cellule
10. Modifier la valeur d'une cellule


Avant-Propos


Ce document a pour seul but de présenter une facon simple de piloter Excel, en restant indépendant des composants de Delphi.
Le code a été écrit et testé avec Delphi 7 et Excel 2000 Français.

Les commentaires au code sont minimaux, ceci n'étant pas une explication du fonctionnement d'Excel, mais simplement l'interfacage avec Delphi et le code étant, je pense, explicite par lui-même.

L'utilisation du Variant est quasi générale. Pour rappel, le type Variant est un type de variable qui a la particularité de pouvoir ne pas être déterminé au moment de la compilation, et même de changer en cours d'éxécution du programme. Son plus grand intéret, à mon sens, est qu'il peut aussi contenir une interface vers un objet OLE et donner accès aux propriétés, procédures et fonctions de celui-ci.


1. Démarrer Excel


Avant de pouvoir piloter Excel, il est nécessaire d'ajouter ComObj à la clauses Uses.


1.1. Ouvrir une nouvelle instance


var vMSExcel : variant; begin vMSExcel := CreateOleObject('Excel.Application'); vMSExcel.Visible := true; end;
La propriété Visible permet de spécifier si Excel est affiché a l'écran ou s'il reste en tâche de fond.


1.2. Se connecter à une instance existante


var vMSExcel : variant; begin vMSExcel := GetActiveOleObject('Excel.Application'); vMSExcel.Visible := true; end;
Le code suivant permet donc de lancer Excel si il n'est pas déjà actif ou de se connecter à l'instance existante éventuelle.

try vMSExcel := GetActiveOleObject('Excel.Application'); except vMSExcel := CreateOleObject('Excel.Application'); end;

2. Fermer Excel


var vMXEcel : variant; begin vMSExcel.Quit; vMSExcel := unassigned; end;
Positionner vMSExcel à unassigned permet de libérer le Variant.


3. Créer un nouveau classeur


var vXLWorkbook, vXLWorkbooks : variant; begin vXLWorkbooks := vMSExcel.Workbooks; vXLWorkbook := vXLWorkbooks.Add; end;
Excel tient à jour une liste de tous les classeurs ouverts, dans une collection appelée WorkBooks.
Ouvrir un nouveau classeur revient simplement à ajouter un nouvel élement à cette collection. La fonction Add renvoie un Variant faisant référence au nouveau classeur.


4. Ouvrir un classeur existant




4.1. Ouvrir un classeur simple


var vXLWorkbooks, vXLWorkbook : variant; aFileName : AnsiString; begin aFileName := 'c:\Home\Sources\Delphi\classeur1.xls'; vXLWorkbooks := vMSExcel.Workbooks; vXLWorkbook := vXLWorkbooks.Open(vFileName); end;
Ouvrir un classeur se fait sur le même principe que la création, à savoir l'ajout a la collection Workbooks d'un nouvel élément, non plus avec la fonction Add, mais la fonction Open.


4.2. Ouvrir un classeur en lecture seule


var vXLWorkbooks, vXLWorkbook, vReadOnly, vLink : variant; aFileName : AnsiString; begin aFileName := 'c:\Home\Sources\Delphi\classeur1.xls'; vLink := unassigned; vReadOnly := true; vXLWorkbooks := vMSExcel.Workbooks; vXLWorkbook := vXLWorkbooks.Open(vFileName, vLink, vReadOnly); end;
Ouvrir un classeur en lecture seule se fait en passant le 3e paramètre de la fonction Open avec une valeur true.
La fonction Open possède une série de paramètres dont la liste exhaustive se trouve dans l'aide de VBA pour Excel.
A noter que les paramètres facultatifs doivent etre passés comme des Variants Unassigned, et non des nil, comme on pourrait le penser au premier abord.


4.3. Ouvrir un fichier csv


var aFileName : AnsiString; vXLWorkbooks, vXLWorkbook, vUnused, vSeparator : variant; begin aFileName := 'c:\Home\Sources\Delphi\Excel\text.csv'; vUnused := unassigned; vSeparator := 4; vXLWorkbooks := vMSExcel.Workbooks; vXLWorkbook := vXLWorkbooks.Open(aFileName, vUnused, vUnused, vSeparator); end;
vSeparator spécifie le caractère utilisé comme séparateur de champs dans le fichier texte à importer.
Pour connaître les différentes valeurs possibles, voir la documentation de VBA d'Excel.


5. Enregistrer un classeur



5.1. Enregistrer le classeur sous le même nom


Une fois le classeur ouvert, pour l'enregistrer, il suffit de faire :

var vXLWorkbook : variant; begin vXLWorkbook.Save; end;

5.2. Enregistrer le classeur sous un autre nom


Une fois le classeur ouvert, pour l'enregistrer en changeant de nom, il suffit de faire :

var aFileName : AnsiString; vXLWorkbook : variant; begin aFileName := 'c:\Home\Sources\Delphi\Excel\SaveAs.xls'; vXLWorkbook.SaveAs(aFileName); end;

6. Fermer un classeur


var vSaveChanges : variant; aFileName : AnsiString; begin vSaveChanges := true; aFileName := 'c:\Home\Sources\Delphi\Excel\SaveAs.xls'; vXLWorkbook.Close(vSaveChanges, aFileName); end;
Le 1er paramètre de la fonction Close permet de spécifier si les modifications sont enregistrées.

  • true : les modifications sont energistrées,
  • false : les modifications ne sont aps enrgistrées,
  • Unassigned : demande à l'utilisateur.

Le 2e paramètre de la fonction Close permet de spécifier le nom sous lequel le classeur sera enrgistré.

Ces 2 paramètres sont facultatifs.


7. Accéder à une feuille de calcul


var aSheetName : AnsiString; vWorksheet : variant; begin aSheetName := 'Feuil2'; vWorksheet := vXLWorkbook.WorkSheets[aSheetName]; end;

8. Accéder à une cellule


var aRange : AnsiString; vCell : variant; begin aRange := 'D3'; vCell := vWorksheet.Range[aRange]; end;

9. Lire la valeur d'une cellule


var aValue, aRange : AnsiString; vCell : variant; begin aRange := 'D3'; vCell := vWorksheet.Range[aRange]; aValue := vCell.Value; end;

10. Modifier la valeur d'une cellule


var aRange, aValue : AnsiString; vCell : variant; begin aRange := 'D3'; vCell := vWorksheet.Range[aRange]; aValue := 'nouveau'; vCell.Value := aValue; end;
Mettre à jour une plage de cellules peut se faire de la même facon , simplement en spécifiant une sélection à la place d'une cellule seule

vRange := 'D3';
devient alors

vRange := 'C3:E5';

Voir également mes autres articles :
Piloter Word sous C++ Builder et Delphi
Piloter Excel sous C++ Builder et Delphi
Utiliser l'API mySQL sous C++ Builder et Delphi
Utiliser un WebService sous C++ Builder et Delphi
Utiliser FMOD sous C++ Builder
Créer et utiliser une DLL sous C++ Builder
Signer des données avec C++ Builder
Comment déployer une application SWT via WebStart
Créer et déployer un premier servlet avec TomCat
Sans oublier :
la FAQ C++ Builder par Geronimo
la FAQ C
la FAQ C++


Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur.
La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

Responsables bénévoles de la rubrique Delphi : Nono40 et Pedro - Contacter par EMail :
Vos questions techniques : forum d'entraide Delphi - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.