La librairie PHPExcel est excellente pour qui veut lire et écrire des fichiers Excel (xlsx, xls) ou LibreOffice (ods) avec le langage PHP. On rencontre tous des fichiers Excel dont la taille importante fait durer le temps de chargement plus de que de raison sur notre ordinateur de bureau. Avec PHPExcel c’est encore pire, et un tableur de plusieurs dizaines de milliers de formules sera quasiment impossible à importer à cause de la consommation mémoire et du temps de traitement. La taille du fichier xlsx n’est pas toujours révélatrice, en raison de la compression native du format. En effet, cette compression sera particulièrement efficace dans le cas de gros tableaux avec des formules ou résultats semblables.

Import PHPExcel classique

La méthode d’import classique avec PHPExcel consiste à détecter automatiquement le nom des feuilles (worksheets) et à les importer une à une. C’est très pratique car applicable à n’importe quel fichier.

Le problème qui peut se poser, c’est que la librairie PHPExcel va parser, interpréter et calculer tous les onglets, qu’ils vous soient utiles ou pas. C’est précisément là que nous avons une marge de manœuvre en n’ouvrant que les onglets utiles.

Import feuille par feuille

Voici un exemple où on spécifie les noms des onglets à utiliser dans $tabSheets , tout en écartant les autres.

Précédemment, la fonction PHPExcel::getWorksheetIterator()  retournait un objet très complexe avec la description de toutes les feuilles. Là on obtient la liste des noms des feuilles avec PHPExcel::getSheetNames()  pour ensuite comparer avec notre liste des feuilles souhaitées. On ne passe en mode objet en ouvrant la feuille que lorsque nécessaire avec PHPExcel::getSheetByName() .

Conclusion

Cette différence parait anodine car elle ne modifie pas en profondeur la manière de procéder. Dans un cas de figure concret, j’ai tout de même pu diminuer l’import d’un fichier volumineux de plus de 10 heures à 2 minutes.