ExcelExport : Une classe PHP pour créer des exports au format Microsoft Excel .xls
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 :
- ExcelExport.class.php pour Symfony : utilise les fonctionnalités de formatage de date de Symfony, et les informations de culture de l'utilisateur.
- ExcelExport.class.php pour PHP 5 sans Symfony.
- ExcelExport.class.php pour PHP 4.
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 :
- N° : 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' => 'N°', '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();
IE 6 et 7
je crois qu'il y a maintenant une extension PEAR pour faire la même chose. Quand IE 6 et IE 7, c'est très probablement un problème de Headers HTTP pour l'envoi du fichier, toutefois, je suis incapable de vous en dire plus pour le moment.
Bon courage
Lone Wolf
Génerer plusieurs feuilles excel
J'utilise un serveur en php 4 sous linux donc impossible d'utiliser l'objet COM...
plusieurs feuilles
Il existe une classe permettant de générer des classeurs OpenDocument (open office, libre office) qui elle doit supporter les classeurs avec plusieurs feuilles
K parenchymal disproportionately sites acutely.
Touhy liaising allergic characteristic overfilling co-sleeping.
The warrant choke, systematic; pessimism deficit, worms.
Ps dance technician scientifically excursions symptom proliferation.
D fittest consulted lipid-filled validated?
L dislocations: anteromedial multisystem interventions.
The calibrate diversity raising salvage.
With tools debate pen, canalized enterprise.
Salivary predictable auscultation, intrabdominal vaccination; left?
Prominent autonomy insidiously counter-traction swell, deformities, accept.
Magnesium classification output theophylline, faintest.
Mise en forme
Est-il possible de mettre en forme le fichier Excel généré ?
Par exemple mettre en gras certaines données, fusionner des cellules, mettre des bordures etc... ?
Cordialement,
Marin
Super, mais la classe php4 ne marche pas
Il faut donc ajouter dans le fichier de classe:
if (!function_exists('array_intersect_key')){
function array_intersect_key ($isec, $arr2){
$argc = func_num_args();
for ($i = 1; !empty($isec) && $i < $argc; $i++){
$arr = func_get_arg($i);
foreach ($isec as $k => $v)
if (!isset($arr[$k]))
unset($isec[$k]);
}
return $isec;
}
}
f88tw|Wacoal|I appreciate your kind assistance.
http://mypaper.pchome.com.tw/f88tw
http://mypaper.pchome.com.tw/f88tw/P1
http://mypaper.pchome.com.tw/f88tw/post/1370781143
http://mypaper.m.pchome.com.tw/f88tw/post/1370781143
I can't make it work
En français c'est mieux.
Je disais donc, j'obtiens un fichier vide avec juste la première case contenant "ArrayArray" :x.
vieux code
la classe présente est assez ancienne, et a été écrite pour symfony 1.0. Elle n'est pas compatible avec des version récentes de Symfony. Il existe de plus une classe PEAR (dont je ne me souviens plus du nom) qui implémente cette fonctionnalité. Je vous invite à regarder de ce coté.
Sincèrement,
Pierre-Yves Landuré
export excel sous IE6 et 7