2 Mars
2009

Lire un fichier excel avec php

Tags: php excel

Voici un tutoriel qui présente de façon simple et concise la manière la plus efficace de lire un fichier excel (*.xls) avec le langage PHP.

Premièrement, télécharger la librairie excelReader à cette adresse : http://sourceforge.net/projects/phpexcelreader

Seconde chose à faire, renommer le fichier "OLERead.ini" en "OLERead.php".

La troisième, allé modifier le path (chemin) d’inclusion du fichier OLERead.php dans reader.php

Vérifier que le fichier excel fournie avec le package s’ouvre bien avec le logiciel Microsoft Excel (On ne sait jamais). Dans le cas où celui-ci est illisible (Ce qui m’est arrivé, c’est pour cela que je vous préviens, cela vous évitera deux heures d’investigation infructueuse ^^), prenez ou créez un fichier excel qui fonctionne.

Donc pour lire ce jolie fichier en PHP rien de très compliqué. Suivez l’exemple fournie dans le package...

Et si l’on commentait un minimum cet exemple...

// Chargement de la librairie
Include('Excel/reader.php');

// Instanciation de la class permettant la lecture du fichier excel
$data = new Spreadsheet_Excel_Reader();


// Définition du type d’encodage de caractère à utiliser pour la sortie (ce qui va être affiché à l’écran)
// ici on utilise l’encodage de Windows voir http://en.wikipedia.org/wiki/CP1251
$data->setOutputEncoding('CP1251');

// Chargement du fichier excel à lire
$data->read('mon_beau_fichier_rois_des_fichiers.xls');


/*
$data->sheets[0]['numRows'] – Donne le nombre de lignes
$data->sheets[0]['numCols'] - Donne le nombre de colonnes
$data->sheets[0]['cells'][$i][$j] – retourne la donnée de la ligne $i et de la colonne $j

$data->sheets[0]['cellsInfo'][$i][$j] – retourne des informations à-propos de la cellule

*/
error_reporting(E_ALL ^ E_NOTICE);

// Parse l’intégralité du fichier excel
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
	for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
		echo "\"".$data->sheets[0]['cells'][$i][$j]."\",";
	}
	echo "\n";
}

 

Problème rencontré :

Encodage en utf-8. Pour palier à ce problème je vous conseille d’utiliser la fonction php mb_convert_encoding en lieu et place de la fonction utf8-encode. Pour dire vrai je me suis fait une petite fonction que j’appelle à chaque extraction de données de la librairie.

function cleanThis($val){
	return mb_convert_encoding($val, "UTF-8","windows-1252");
}

// Exemple d’appel
cleanThis($data->sheets[0]['cells'][$x][1])

Normalement avec tout cela vous devriez pouvoir lire aisément un fichier excel avec php.

Pour des raisons de praticité, je me suis fait mon propre package avec les recommandations que je vous ais donné au début. Le voici.

Bon dev !


De : Rija, le : 20/08/2010
Merci beaucoup pour la fonction mb_convert_encoding()
De : waldo, le : 09/06/2010
xramber*
Malheureusement, cette librairie est très gourmande, car elle charge l'intégralité du fichier en une fois.
On est donc obligé de modifier certain paramètres de PHP.
De : xramber, le : 08/06/2010
Bonjour,
J'ai vu que ce blog était assez actif, je voulais donc savoir si vous avez utilisé cette bibliothèque pour traiter des fichiers excel assez conséquents (plus de 3 mo): En effet, lorsque je fais des traitements en local sur ce type de fichiers, j'ai différents types d'erreurs qui s'affichent: PHP Fatal error: Maximum execution time of 60 seconds exceeded... ou PHP Fatal error: Allowed memory size of 209715200 bytes exhausted (tried to allocate 35 bytes)...
Est-il possible donc de traiter ce type de fichier sans avoir à toucher aux paramètres php.ini ou de convertir le fichier en .csv? (la mise en page est un élément important dans le cadre de mon travail).
De : tim, le : 28/04/2010
Merci pour cet article, il va beaucoup me servir :)
Bonne continuation pour le blog !
De : waldo, le : 27/04/2010
Dudu*, je n'en ai aucune idée.
Mais vue qu'une formule est du contenue dans une cellule, je pense qu'il est possible de la récupérer.
De : armole, le : 12/04/2010
Ton truc est génial ! merci je fais tourner ta page !
De : Dudu, le : 10/04/2010
Bonjour, y a-t-il un moyen de récupérer la formule d'une cellule ? (par exemple : =SOMME(B8+C8)).
Merci
De : .Spirit, le : 20/03/2010
Merci beaucoup pour cette aide précieuse !
Ajouter un commentaire