BlueGEEK Journal

Accueil > Manip’s > Delphi > Automation > Comment Placer un document WORD dans un Mémo ?

Comment Placer un document WORD dans un Mémo ?

lundi 24 mars 2008, par bluegyn_spip

- Delphi sait implicitement gérer les formats :

  • Texte brut TXT (composant Mémo)
  • Et enrichi RTF (composant RicheEdit)

- Mais il ne sait pas lire le format propriétaire DOC qui appartient à Microsoft

- Delphi sachant parfaitement manipuler les bibliothèques Windows,

- Et Windows sachant parfaitement faire communiquer ses différentes applications

  • Il est possible d’accèder au contenu d’un fichier WORD
  • qui prend en charge les commandes habituellement dévolues à VBA


ETAPE 1 = DÉCLARER LE COMPOSANT COM


- Le Modèle de Conception des Objets (MCO dit C.O.M) est disponible dans la distribution Delphi sous le nom de :

<quote

- ComOBJ

- Qui doit être déclaré dans la clause USES

- On en profite pour déclarer 3 variables globales COM :

  1. WordApplication
  1. WordDocument
  1. WordDocuments (avec un s car il s’agit de la collection de tous les docs ouverts)

- Ces variables ont le type VARIANT

  • qui est le type dédié aux variables COM (ex Ole)

 [1]


ETAPE 2 - CONNECTER LE PROGRAMME A WORD


- Si Word est ouvert :

  • La connexion s’effectue par la commande :

WordApplication := GetActiveOleObject(’Word.Application’) ;

- Si Word est fermé, la commande suivante l’ouvre :

WordApplication := CreateOleObject(’Word.Application’) ;

- Si je veux que Word s’affiche à l’écran j’écris ensuite

WordApplication.Visible := true ;

- Si je veux qu’il reste masqué en arrière plan

WordApplication.Visible := False ;


OUVERTURE DU DOCUMENT ET CONVERSION EN TEXTE


- Dans cet exemple le document s’appelle

TEST.DOC

- Et est placé à côté de l’exécutable.

- Pour ouvrir un document la commande est

WordDocument := WordDocuments.Open( ’test.doc’ ) ;

- Le Contenu textuel est recopié sous forme TEXTE BRUT

text := WordDocument.content.text ;

- Les retours charriots sont remplacés par des sauts ligne

text := StringReplace(text, chr(13), chr(13)+chr(10) , [rfReplaceAll,rfIgnoreCase]) ;

- Et le tout est placé dans mon Mémo.



- Fermeture de Word :

  • WordApplication.Quit ;
  • WordApplication := unassigned ;

- Nouveau Document :

  • WordDocuments := WordApplication.Documents ;
  • WordDocument := WordDocuments.Add ;

- Fermeture du DOC en sauvant les données

  • WordApplication.ActiveDocument.Close( True ) ;

- Sauvegarde

  • WordDocument.Save ;

- Enregister Sous

  • WordDocument.SaveAs(aFileName) ;

etc ...


[1Pour l’anecdote je déclare aussi une variable AppPath qui est le chemin de l’application et qui prend la valeur :

AppPath := ExtractFilePath( paramstr(0) ) ;