Faire communiquer SAP et MS WORD grâce à OLE
Cela fait des années que je pratique cette méthode de communication, pour des petites "bidouilles" entre SAP et Microsoft. C'est rapide et ludique (j'adore voir Word se remplir tout seul, c'est "magique", un peu comme quand je regarde un piano automatique dont les touches s'enfoncent seules lorsqu'il joue).
Enfin rapide... une fois qu'on a réussi a trouver les bonnes commandes ! Car c'est assez galère à programmer :
- commande obscure
- pas ou peu de documentation ou d'exemple
- de nombreuses questions sur le net, mais les réponses sont rares
Cette fois j'ai eu un gros besoin. Je devais générer un document complet, sous word, à partir de tonnes de données SAP. Prenant mon courage à 2 mains, j'ai de nouveau déguainé OLE, et pour que ca soit réutilisable, j'en ai fait une classe d'abstraction.
En utilisant ma classe, fini la galère, vous avez juste a l'inclure en début de votre programme, et ensuite de simples appels aux méthod write_text ou write_table vont vous permettre de remplir votre document... magiquement !
Sont gérés par la classe :
- Création de document vierge ou via template dotx
- Ecriture de texte avec ou sans style (style de paragraphe et/ou de police)
- Option bold, italique, souligné, choix de police et taille, couleur
- Saut de ligne, de page, de section et section continue
- Ecriture de tableau avec ou sans style de tableau (et possibilité de définir des option de formatage par cellule : gras, couleur...)
- Note de bas de page
- Ecriture d'entete/pied de page simples
- Gestion de l'orientation (portrait/paysage)
- Insertion d'image
- Insertion de dessin (canvas)
- Insertion de table des matières
- Insertion de champs personnalisés (custom fields)
- Mise a jour du titre de la fenetre word
- Sauvegarde du document et fermeture de word
A l'usage, je me suis malgré tout rendu compte que la génération était assez longue (5 à 10 minutes pour un document de 50 pages). Ce sont les tableaux qui sont particulièrement lents.
Et donc finalement j'ai du changer de méthode pour mon projet, mais je publie malgré tout cette classe car elle est pleinement fonctionnelle, et pourra toujours vous servir de "how to" sur vos petits besoins OLE :)
Pour le téléchargement, je livre un programme de "test" de la classe qui montre comment l'utiliser. Le zip contient également un template, et quelques images qui sont utilisées par le programme test.