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 C FAQs C TUTORIELS C LIVRES C COMPILATEURS C SOURCES GTK+

Pilotage OLE de Word à partir de Borland C++ Builder

03/11/2002

Par LFE (autres articles)
 

Ce document a pour but de présenter une méthode simple de pilotage OLE de Word à partir de C++ Builder


Avant-Propos
1. Démarrer Word
1.1. Ouvrir une nouvelle instance
1.2. Se connecter à une instance existante
2. Fermer Word
3. Créer un nouveau document
4. Ouvrir un document existant
4.1. Ouvrir un document simple
4.2. Ouvrir un document en lecture seule
4.3. Ouvrir un document protégé par un mot de passe
5. Enregistrer un document
5.1. Enregistrer le classeur sous le même nom
5.2. Enregistrer le document sous un autre nom
6. Fermer un classeur
7. Utiliser des signets pour insérer du texte dans un document
7.1. Accéder aux signets
7.2. Insérer le texte
8. Lister les signets contenus dans un document


Avant-Propos


Ce document a pour seul but de présenter une facon simple de piloter Word, en restant indépendant des composants de BCB.
Le code a été écrit et testé avec Borland C++ Builder 6.0 Enterprise anglais 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 C++ Builder 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


Ajouter la ligne suivante dans les include :

#include <utilcls.h>

1.1. Ouvrir une nouvelle instance


Variant vMSWord; vMSWord = Variant::CreateObject("Word.Application"); vMSWord.OlePropertySet("Visible", true);
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


Variant vMSWord; vMSWord = Variant::GetActiveObject("Word.Application"); vMSWord.OlePropertySet("Visible", true);
Le code suivant permet donc de lancer Word si il n'est pas déjà actif ou de se connecter à l'instance existante éventuelle

try { vMSWord = Variant::GetActiveObject("Word.Application"); } catch(...) { vMSWord = Variant::CreateObject("Word.Application"); }

2. Fermer Word


vMSWord.OleFunction("Quit"); vMSWord = Unassigned;
Positionner vMSWord à Unassigned permet de libérer le Variant.


3. Créer un nouveau document


Variant vWDocument, vWDocuments; vWDocuments = vMSWord.OlePropertyGet("Documents"); vWDocument = vWDocuments.OleFunction("Add");
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


Variant vFileName, vWDocuments, vWDocument; vFileName = "c:\\Home\\Sources\\Cpp\\Word\\Document1.doc"; vWDocuments = vMSWord.OlePropertyGet("Documents"); vWDocument = vWDocuments.OleFunction("Open", vFileName);
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


Variant vFileName, vWDocuments, vWDocument, vReadOnly, vLink; vFileName = "c:\\Home\\Sources\\Cpp\\Word\\Document1.doc"; vLink = Unassigned; vReadOnly = true; vWDocuments = vMSWord.OlePropertyGet("Documents"); vWDocument = vWDocuments.OleFunction("Open", vFileName, vLink, vReadOnly);
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 NULL, comme on pourrait le penser au premier abord.


4.3. Ouvrir un document protégé par un mot de passe


Variant vFileName, vWDocuments, vWDocument, vReadOnly, vLink, vFormat, vReadPass; vFileName = "c:\\Home\\Sources\\Cpp\\Word\\Document1.doc"; vLink = Unassigned; vReadOnly = false; vFormat = Unassigned; vReadPass = "MotDePasse"; vWDocuments = vMSWord.OlePropertyGet("Documents"); vWDocument = vWDocuments.OleFunction("Open", vFileName, vLink, vReadOnly, vFormat, vReadPass);
Le 5e paramètre de la fonction Open permet de spécifier le mot de passe utilisé pour la protection en lecture du classeur


5. Enregistrer un document



5.1. Enregistrer le classeur sous le même nom


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

vWDocument.OleProcedure("Save");

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

Variant vFileName; vFileName = "c:\\Home\\Sources\\Cpp\\Word\\Document1.doc"; vWDocument.OleProcedure("Saveas", vFileName);

6. Fermer un classeur


Variant vSaveChanges, vFileName; vSaveChanges = Unassigned; vFileName = "c:\\Home\\Sources\\Cpp\\Word\\Document1.doc"; vWDocument.OleFunction("Close", vSaveChanges);
Le 1er paramètre de la fonction Close permet de spécifier si les modifications sont enregistrées

  • true : les modifications sont enregistré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 enregistré.

Ces 2 paramètres sont facultatifs.


7. Utiliser des signets pour insérer du texte dans un document



7.1. Accéder aux signets


Variant vBookMarks, vWDocument, vBookMark; vBookMarks = vWDocument.OlePropertyGet("BookMarks"); if (vBookMarks.OleFunction("Exists", "signet1")) { vBookMark = vBookMarks.OleFunction("Item", "signet1"); vBookMark.OleFunction("Select"); // ... }
Pour accéder à un signet, il faut d'abord ouvrir la collection BookMarks, et vérifier 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


Variant vBookMark, vContent; vContent = vBookMark.OlePropertyGet("Range"); vContent.OleFunction("InsertAfter", "texte");
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.

Variant vBookMark, vBookMarks, vContent; int iCount; AnsiString aBookName; vBookMarks = vWDocument.OlePropertyGet("BookMarks"); iCount = vBookMarks.OlePropertyGet("Count"); for (int i=1; i <= iCount; i++) { vBookMark = vBookMarks.OleFunction("Item", i); aBookName = vBookMark.OlePropertyGet("Name"); ListBox1->Items->Add(aBookName); vBookMark = Unassigned; }

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.

Responsable bénévole de la rubrique C : Arnaud Feltz (buchs) - Contacter par EMail :
Vos questions techniques : forum d'entraide C - 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.