Ce document a pour seul but de présenter une facon simple de piloter Word, en restant indépendant des composants
de Delphi.
Le code a été écrit et testé avec Delphi 7 et Word 2000 Français.
Les commentaires au code sont minimaux, ceci n'étant pas une explication du fonctionnement de Word, 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.
La comparaison avec le pilotage d'Excel permet de constater qu'à l'exception des noms de collections et d'objets, les
techniques sont identiques, à très peu de choses près.
1. Démarrer Word
Avant de pouvoir piloter Excel, il est nécessaire d'ajouter ComObj à la clauses Uses.
1.1. Ouvrir une nouvelle instance
var
vMSWord : variant;
begin
vMSWord := CreateOleObject('Word.Application');
vMSWord.Visible := true;
end;
La propriété Visible permet de spécifier si Word est affiché a l'écran ou s'il reste en tâche de fond.
1.2. Se connecter à une instance existante
var
vMSWord : variant;
begin
vMSWord = GetActiveOleObject('Word.Application');
vMSWord.Visible := true;
end;
Le code suivant permet donc de lancer Word si il n'est pas déjà actif ou de se connecter à l'instance existante éventuelle
var
vMSWord : variant;
begin
vMSWord.Quit;
vMSWord := unassigned;
end.
Positionner vMSWord à Unassigned permet de libérer le Variant.
3. Créer un nouveau document
var
vWDocument, vWDocuments : variant;
begin
vWDocuments := vMSWord.Documents;
vWDocument := vwDocuments.Add;
end.
Word tient à jour une liste de tous les documents ouverts, dans une collection appelée Documents.
Ouvrir un nouveau document revient simplement à ajouter un nouvel élement à cette collection.
La fonction Add renvoie un Variant faisant référence au nouveau document.
4. Ouvrir un document existant
4.1. Ouvrir un document simple
var
aFileName : AnsiString;
begin
aFileName := 'c:\Home\Sources\Delphi\Word\Document1.doc';
vWDocuments := vMSWord.Documents;
vWDocument := vWDocuments.Open(aFileName);
end;
Ouvrir un document se fait sur le même principe que la création, à savoir l'ajout a la collection Documents
d'un nouvel élément, non plus avec la fonction Add, mais la fonction Open.
4.2. Ouvrir un document en lecture seule
var
aFileName : AnsiString;
vReadOnly, vLink : variant;
begin
aFileName := 'c:\Home\Sources\Delphi\Word\Document1.doc';
vLink := unassigned;
vReadOnly := true;
vWDocuments := vMSWord.Documents;
vWDocument := vWDocuments.Open(aFileName, vLink, vReadOnly);
end
Ouvrir un document 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
Word.
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.
5. Enregistrer un document
5.1. Enregistrer le document sous le même nom
Une fois le document ouvert, pour l'enregistrer, il suffit de faire :
var
vWDocument : variant;
begin
vWDocument.Save;
end;
5.2. Enregistrer le document sous un autre nom
Une fois le document ouvert, pour l'enregistrer en changeant de nom, il suffit de faire :
var
aFileName : AnsiString;
begin
aFileName := 'c:\Home\Sources\Delphi\Word\SaveAs.doc';
vWDocument.SaveAs(aFileName);
end
6. Fermer un document
var
aFileName : AnsiString;
vSaveChanges : variant;
begin
vSaveChanges := true;
aFileName := 'c:\Home\Sources\Cpp\Word\Document1.doc';
vWDocument.Close(vSaveChanges);
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 pas 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. Utiliser des signets pour insérer du texte dans un document
7.1. Accéder aux signets
var
vBookMarks, vBookMark : variant;
begin
vBookMarks := vWDocument.BookMarks;
if vBookMarks.Exists('signet1') thenbegin
vBookMark := vBookMarks.Item('signet1');
vBookMark.Select;
{ .... }end;
end;
Pour accéder à un signet, il faut d'abord ouvrir la collection BookMarks,
et verifier que le signet existe : Exists.
La fonction Item premet d'extraire un signet de la collection. Select permet de l'atteindre
7.2. Insérer le texte
var
vBookMark, vContent : variant;
begin
vContent := vBookMark.Range;
vContent.InsertAfter('texte à insérer');
end;
Une fois le signet atteint, il faut accéder au Range.
La fonction InsertAfter permet d'insérer le texte à la position courante du curseur.
8. Lister les signets contenus dans un document
Le code qui suit permet de lister tous les signets contenus dans un document Word et de les afficher dans un ListBox.
var
vBookMarks, vBookMark : variant;
iCount, i : integer;
aBookName : AnsiString;
begin
vBookMarks := vWDocument.BookMarks;
iCount := vBookMarks.Count;
for i := 1 to iCount dobegin
vBookMark := vBookMarks.Item(i);
aBookName := vBookMark.Name;
ListBox1.Items.Add(aBookName);
end;
end;
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 :