Word avec Tcl et Tcom

 

GS - Cette page regroupe des exemples de l'utilisation du package Tcom avec Word.

- Faire un tableau et écrire du texte au dessus et en dessous.

- Comment connaître la version de Word utilisée.

- Comment écrire dans l'en-tête et le pieds de page.


GS (070210) Un exemple qui montre comment écrire quelques lignes de texte et ensuite créer un tableau dans Word. A titre illustratif, le contenu porte sur les statistiques des messages postés sur fclt en 2006.

C'est fortement inspiré de la contribution conjointe de Miko et de Eric [1] sur fclt (voir la file de discussion [2]).

 package require tcom

 set lmois {Janvier Février Mars Avril Mai Juin \
            Juillet Août Septembre Octobre Novembre Décembre}
 set lmsg {80 64 63 44 86 84 379 204 135 210 147 116}

 # -----------------------------------------------------------------
 set moyenne [expr {[expr [join $lmsg +]] / [llength $lmsg]}]
 set min [lindex [set ls [lsort -integer $lmsg]] 0]
 set max [lindex $ls end]

 # Appel de Word
 set ::application [::tcom::ref createobject "Word.Application"]
 $::application Visible 1; # Rend word visible
 set ::docs [$::application Documents]
 # Création d'un nouveau document
 set ::doc [$::docs Add]

 # Affichage de quelques lignes de texte

 # Titre en gras italique souligné 16 points pica
 [[[$::doc ActiveWindow] Selection] Font] Size 16
 [[[$::doc ActiveWindow] Selection] Font] Bold 100
 [[[$::doc ActiveWindow] Selection] Font] Italic 100
 [[[$::doc ActiveWindow] Selection] Font] Underline 1
 [$::application Selection] TypeText \
 "Statistiques du groupe fr.comp.lang.tcl pour 2006"
 [[[$::doc ActiveWindow] Selection] Font] Underline 0
 [[[$::doc ActiveWindow] Selection] Font] Italic 0
 [[[$::doc ActiveWindow] Selection] Font] Bold 0
 [[[$::doc ActiveWindow] Selection] Font] Size 12

 # Quelques lignes vides
 [$::application Selection] TypeParagraph
 [$::application Selection] TypeParagraph
 [$::application Selection] TypeParagraph

 [$::application Selection] TypeText \
 "Nombre maximum de messages:\t $max  (Juillet)"
 [$::application Selection] TypeParagraph
 [$::application Selection] TypeText \
 "Nombre minimum de messages:\t $min  (Avril)"
 [$::application Selection] TypeParagraph
 [$::application Selection] TypeText \
 "Moyenne sur l'année: $moyenne"

 # Quelques lignes vides
 [$::application Selection] TypeParagraph
 [$::application Selection] TypeParagraph
 [$::application Selection] TypeParagraph

 # Creation et remplissage d'un tableau de 13 lignes et 2 colonnes

 set dunit 12
 [$::doc Tables] Add [[$::application Selection] Range] 13 2

 [[[$::doc ActiveWindow] Selection] Font] Bold 100
 [$::application Selection] TypeText "Mois"
 [[[$::doc ActiveWindow] Selection] Font] Bold 0
 [$::application Selection] MoveRight $dunit 1
 [[[$::doc ActiveWindow] Selection] Font] Bold 100
 [$::application Selection] TypeText "Messages"
 [[[$::doc ActiveWindow] Selection] Font] Bold 0
 [$::application Selection] MoveRight $dunit 1

 set i 0
 foreach mois $lmois {
 [$::application Selection] TypeText "$mois"
 [$::application Selection] MoveRight $dunit 1
 [$::application Selection] TypeText [lindex $lmsg $i]
 [$::application Selection] MoveRight $dunit 1
 incr i
 }

 [[[$::doc ActiveWindow] Selection] Font] Bold 100
 [$::application Selection] TypeText "Total"
 [[[$::doc ActiveWindow] Selection] Font] Bold 0
 [$::application Selection] MoveRight $dunit 1
 [$::application Selection] TypeText [expr [join $lmsg +]]

 # On sort du tableau pour écrire une phrase en dessous
 set dunit 5
 [$::application Selection] MoveDown $dunit 1
 [$::application Selection] TypeParagraph
 [$::application Selection] TypeText \
 "Conclusion: plus il fait chaud et plus il y a de messages ;-)"

GS (070224) Comment connaître la version de Word utilisée ?

 # version: 8.0 -> Word 97
 #          9.0 -> Word 2000
 #         10.0 -> Word XP
 #         11.0 -> Word 2003

 package require tcom
 set ::application [::tcom::ref createobject "Word.Application"]
 # Donne la version
 set version [$::application Version]
 # Donne la version et le niveau de patch
 set build [$::application Build]
 # Donne le code produit
 set pcode [$::application ProductCode]
 $::application Quit

GS (070224) Comment écrire dans l'en-tête et le pieds de page ?

 package require tcom
 set ::application [::tcom::ref createobject "Word.Application"]
 set ::docs [$::application Documents]
 set ::doc [$::docs Add]
 $::application Visible 1
 # On se place dans l'en-tête
 # La valeur 9 correspond à la constante wdSeekCurrentPageHeader
 [[[$::doc ActiveWindow] ActivePane] View] SeekView 9
 [$::application Selection] TypeText "En tête de page"
 # On sort du mode en-tête
 # La valeur 0 correspond à la constante wdPaneNone
 [[[$::doc ActiveWindow] ActivePane] View] SeekView 0
 # On écrit dans la page
 [$::application Selection] TypeParagraph
 [$::application Selection] TypeText "Pleine page"
 # On se place dans le pieds de page
 # La valeur 10 correspond à la constante wdSeekCurrentPageFooter
 [[[$::doc ActiveWindow] ActivePane] View] SeekView 10
 [$::application Selection] TypeText "Pieds de page"
 [[[$::doc ActiveWindow] ActivePane] View] SeekView 0
 $::application Quit

Voir aussi msdoc