La version 3.5 de l'API Apache POI gagne encore en maturité, et s'ouvre à Office 2007; un outil idéal pour relier applications et bureautique.
Qu'on le veuille ou non, la bureautique Microsoft tient encore une place importante dans la manipulation de l'information, et plutôt que de laisser cohabiter deux mondes disjoints, celui des DSI et systèmes d'information d'un côté, celui des utilisateurs et de la bureautique de l'autre, il n'est pas impossible de les marier, de construire des applications qui génèrent ou modifient des fichiers Excel, voire des documents Word.
Il existe pour cela une interface de programmation (API) dénommée Apache POI qui permet de manipuler des fichiers Microsoft Office. Il s’agit d’un projet de l’Apache Software Fondation.
Cette API en Java propose de nombreuses méthodes pour lire et écrire dans des fichiers Word, Excel, PowerPoint, etc. La nouvelle version, la 3.5 datant de fin septembre 2009, supporte les fichiers de la suite Office 2007 (docx, xlsx par exemple). Elle offre une vraie maturité et, est véritablement performante. Elle est particulièrement reconnue pour les traitements sur les fichiers Excel : création de fichier, ajout de feuille, ajout de valeurs dans telle ou telle case, définition de format, mise en forme, fusion de cellules, parcours de cellules, instanciation de formules, etc.
Le module POI-HSSF (qui gère les fichiers Excel) offre donc une variété de possibilités qui trouvent leur utilité au quotidien dans nos réalisations. Le site d’Apache POI fournit de nombreuses informations dont des exemples concrets de mise en œuvre : http://poi.apache.org/spreadsheet/examples.html.
Pour les fichiers Word, les bibliothèques ne vont pas très loin. Elles offrent de bonnes capacités en lecture, mais des méthodes limitées en écriture.
Quelles sont les alternatives à POI pour générer ou modifier des documents bureautiques côté serveur ?
Une première approche consiste à utiliser les fonctions de fusion/publipostage des outils, que ce soit OpenOffice ou bien MS-Word. OpenOffice peut être utilisé pour générer du format Word si besoin, ou bien on peut utiliser directement Word, si l'on est sur plateforme Windows, mais l'insertion dans une plateforme web est délicate : ce sont des solutions peu performantes, peu stables, et ne supportant pas les accès concurrents. On ne peut l'envisager donc que pour de très faibles charges, et avec des modèles de documents parfaitement maîtrisés.
Une approche plus robuste consiste à utiliser un mécanisme de gabarits pour élaborer ou modifier un document. Il peut s'agit des gabarits d'un outil de gestion de contenus, ou bien des gabarits d'un framework de développement. A partir du moment où le document est un fichier texte au format documenté et intelligible, il suffit de disposer des marqueurs aux points d'insertion du contenu, et n'importe quel gestionnaire de gabarits saura injecter les contenus aux bons emplacements, voire même répéter une portion, ou gérer des clauses conditionnelles. ODF de OpenOffice, ou bien DOCX de Word 2007, ou encore l'ancien RTF, sont des formats utilisables en templating.
Commentaires
auriez-vous des pointeurs sur ces possibilités de fusion d'OpenOffice à partir de java?
merci
En Java on manipule les documents Office via l'API UNO :
http://api.openoffice.org/docs/common/ref/com/sun/star/module-ix.html
Un exemple de création de document à partir d'un template :
http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/Text/Example:_Fields_in_a_Template
Dans cet exemple on utilise un document existant avec des champs qui sont remplacés par les valeurs fournies par le programme.
On peut également utiliser la fonctionnalité MailMerge d'OpenOffice qui est assez semblable aux fusions/publipostages de Microsoft Word. Voici l'objet Java qui permet d'utiliser cette fonctionnalité :
http://api.openoffice.org/docs/common/ref/com/sun/star/text/MailMerge.html
Il faut dans ce cas commencer par générer un fichier csv contenant les données à fusionner.
Cordialement,