Traiter des fichiers XLSX avec POI

Logo_Microsoft_Excel_2013.png
Vous utilisez POI dans votre application Java pour lire des fichiers Excel mais celle-ci ne gère que les fichiers XLS. Voici comment faire pour qu’elle puisse aussi traiter des fichiers XLSX (format Office Open XML).

Soit une méthode qui permet de lire un fichier Excel, passé en paramètre sous forme de flux (on pourrait faire de même avec un fichier), de parcourir chaque ligne de la première page et de les traiter :

poi_hssf.png

Malheureusement, celle-ci ne permet de manipuler que des fichiers au format XLS. En effet, si nous lui fournissons un fichier au format XLSX, l’exception « OfficeXmlFileException » est levée à la construction de l’objet « workbook ».

En effet, POI propose deux composants pour traiter les fichiers Excel:

  • HSSF (Horrible SpreadSheet Format ou Format horrible de feuilles de calcul) : permet de traiter les fichiers Excel XLS.
  • XSSF (XML Spreadsheet Format ou Format de feuilles de calcul XML) : permet de traiter les fichiers Excel XLSX (> 2007).

Une solution consiste donc à utiliser le bon composant en fonction du type de fichier transmis.
Pour ce faire, vous aurez besoin, en plus de l’API POI, de l’API POI OOXML, la première ne comprenant pas le composant XSSF.

Voici la dépendance à ajouter au fichier pom.xml :

poi-ooxml-dependency.png

La dernière version stable est la 3.9 mais libre à vous d’utiliser celle qui vous convient.

Voici notre méthode après modification :

poi_hssf_et_xssf.png

Au lieu d’instancier nous-mêmes l’objet « workbook », nous déléguons la tâche à la classe «WorkbookFactory». Celle-ci instancie, en fonction du type de fichier fourni en paramètre, un objet de type HSSFWorkbook ou de type XSSFWorkbook, ce qui permet de traiter selon les cas des fichiers XLS ou XLSX.

Quid des fichiers ODS (OpenOffice) ? POI n'est malheureusement pas prévu pour. Il faut donc s'orienter vers d'autres librairies (jOpenDocument, Apache ODF Toolkit...).

Références

Apache POI

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.