Vous êtes ici : Accueil / Développement / Symfony 1.0 / ExcelExport : Une classe PHP pour créer des exports au format Microsoft Excel .xls

ExcelExport : Une classe PHP pour créer des exports au format Microsoft Excel .xls

Par Pierre-Yves Landuré Dernière modification 24/08/2011 01:25

Pendant longtemps, j'ai cru qu'il était impossible de générer des fichiers XLS à l'aide de PHP. Je me limitais donc à la création de fichiers CSV... Puis un jour, alors que je m'amusais avec PHPMyAdmin, je me suis rendu compte que ce dernier savais créer des exports Excel. Ni une, ni deux, j'ai décortiqué le fonctionnement de PHPMyAdmin, et j'ai compris. PHPMyAdmin ne crée pas des fichiers XLS, mais il crée un fichier HTML avec l'extension ".xls". Excel sait lire de tels fichiers. Cet article présente l'outil que j'ai mis au point pour reproduire cette fonctionnalité.

Important : ExcelExport nécessite ma classe LoaderTool.

En premier lieu, choisissez la version d'ExcelExport qui vous convient le mieux :

Exemple d'utilisation

Mettons que vous ayez un tableau PHP de cette forme :

$contenu = array(
array('id' => 1,
'title' => 'Mon item n°1',
'description' => 'Un item exemple',
'created_at' => time(),
),
array('id' => 2,
'title' => 'Mon item n°2',
'description' => 'Un item exemple',
'created_at' => time(),
),
);

Et que vous souhaitiez l'exporter au format Excel. En premier lieu, définissez les colonnes de votre export Excel. Ici, nous allons définir les colonnes suivantes :

  • : Valeur numérique, obtenue à partir de la colonne 'id'.
  • Nom : Valeur chaîne de caractères, obtenue à partir de la colonne 'title'.
  • Créé le : Valeur date, obtenue à partir de la colonne 'created_at'.

Pour décrire un tel export Excel, utilisez :

$columns = array(
'id' => array('title' => '', 'type' => ExcelExport::NUMBER),
'title' => array('title' => 'Nom', 'type' => ExcelExport::STRING),
'created_at' => array('title' => 'Créé le', 'type' => ExcelExport::DATE),
);

Remarque : notez que je n'ai pas décrit la colonne 'description' : elle sera ignorée dans l'export.

Remarque 2 : Si vous utilisez PHP 4, les constantes deviennent : ExcelExport__NUMBER, ExcelExport__STRING, ExcelExport__DATE.

Créez un nouvel export Excel contenant ces colonnes :

$excel_export = new ExcelExport($columns);

Remarque : Il est possible de forcer la langue cible de l'export Excel. Par défaut, il s'agit de la langue de l'utilisateur si vous utilisez Symfony, sinon, il s'agit de l'anglais (Seule 2 cultures sont supportées : 'fr', et 'en'). Pour forcer la langue, utilisez :

$excel_export = new ExcelExport($columns, 'fr');

Ou :

$excel_export->setCulture('fr');

Enfin, ajoutez votre contenu à l'export. L'ajout peut se faire ligne par ligne, ou comme dans notre cas, plusieurs lignes simultanéement :

$excel_export->addContent($contenu);

Une fois que l'export Excel contient tout sont contenu, vous pouvez le proposer au téléchargement de l'utilisateur (cette méthode utilise ma classe LoaderTool) :

$excel_export->download('mon-fichier-excel.xls');

Vous pouvez aussi récupérer le contenu Excel dans une chaîne de caractères :

$excel_contents = $excel_export->getExcelContents();