Créa-blog

#100JoursPourCoder
Projet Créa-code

Ressources pour développeur web

PHP : Convertir un tableau HTML en CSV ou Excel XLSX

⏱️ Temps de lecture estimé : 10 minutes
Accueil PHP 8 PHP : Convertir un tableau HTML en CSV ou Excel XLSX

Sur de nombreux sites internet, les données sont présentées sous forme de tableaux HTML. Qu’il s’agisse d’une liste de produits, d’un récapitulatif de commandes, d’un emploi du temps ou encore de résultats statistiques, le tableau HTML est l’un des éléments les plus utilisés pour afficher des informations structurées et lisibles. Cependant, il arrive souvent qu’un utilisateur souhaite exploiter ces données en dehors du navigateur. Il voudra peut-être les importer dans un logiciel comme Excel, les analyser avec un tableur, ou encore les partager sous un format universel comme le CSV. Il va falloir convertir le tableau HTML au format CSV ou Excel XLSX.

C’est là qu’intervient la conversion d’un tableau HTML en fichier téléchargeable. Grâce au langage PHP, il est possible de transformer dynamiquement un tableau HTML affiché sur une page en un fichier au format CSV ou XLSX (Excel), prêt à être téléchargé et utilisé.

Dans ce tutoriel, nous allons prendre le temps de comprendre ce que cela signifie, pourquoi c’est utile, et surtout comment le mettre en place concrètement. Vous allez découvrir deux approches : la première, universelle et légère, pour exporter un tableau HTML en CSV, et la seconde, plus puissante, en utilisant la bibliothèque PhpSpreadsheet pour générer des fichiers Excel au format XLSX.

À travers des explications claires, des exemples détaillés et des morceaux de code commentés, vous serez capable à la fin de ce guide de mettre en place vous-même une fonctionnalité d’exportation sur votre site web.

Comprendre ce qu’est un tableau HTML et pourquoi l’exporter

Avant de plonger dans le code, arrêtons-nous un instant sur ce qu’est réellement un tableau HTML. Dans le langage HTML, un tableau se construit avec la balise <table>. Il est composé de lignes <tr> et de cellules <td> (ou <th> pour les en-têtes).

Un exemple très simple de tableau HTML pourrait être :

<table border="1">
    <tr>
        <th>Nom</th>
        <th>Âge</th>
        <th>Ville</th>
    </tr>
    <tr>
        <td>Paul</td>
        <td>28</td>
        <td>Paris</td>
    </tr>
    <tr>
        <td>Julie</td>
        <td>32</td>
        <td>Lyon</td>
    </tr>
</table>

Ce tableau est très lisible dans un navigateur, mais si vous souhaitez le partager avec un collègue, l’utiliser pour faire des calculs, ou l’intégrer à un autre logiciel, le format HTML devient vite un frein. Les logiciels comme Excel, LibreOffice Calc ou Google Sheets n’ouvrent pas directement les fichiers HTML de cette manière.

C’est pourquoi il est utile de convertir ce tableau HTML en un format standard comme CSV ou XLSX.

Voici le rendu de ce tableau HTML avec un peu de CSS sur une page web :

NomÂgeVille
Paul28Paris
Julie32Lyon

Pourquoi choisir CSV ou Excel (XLSX) ?

Avant de coder, il est essentiel de comprendre la différence entre ces deux formats (CSV et XLSX), car ils répondent à des besoins différents.

Le CSV

CSV signifie Comma-Separated Values, soit en français « valeurs séparées par des virgules ». Il s’agit d’un format texte très simple dans lequel chaque ligne correspond à une ligne du tableau, et chaque cellule est séparée par une virgule ou un point-virgule.

Un tableau HTML comme celui vu plus haut donnerait en CSV :

Nom;Âge;Ville
Paul;28;Paris
Julie;32;Lyon

Le format CSV est universel et compatible avec presque tous les logiciels de tableur et d’analyse de données. Il a aussi l’avantage d’être extrêmement léger et facile à générer.

Le XLSX

Le format XLSX est le format moderne de Microsoft Excel. Contrairement au CSV, il s’agit d’un format structuré et compressé, qui permet beaucoup plus de choses : mise en forme avancée, couleurs, formules, filtres, graphiques, etc.

L’inconvénient est que générer un fichier XLSX est plus complexe, car il faut respecter une structure précise. C’est pourquoi on utilise généralement une bibliothèque spécialisée comme PhpSpreadsheet, qui se charge de tout l’aspect technique.

Si vous cherchez une solution simple et rapide, le CSV est idéal. Si vous voulez offrir une expérience plus professionnelle et riche à vos utilisateurs, le XLSX est la meilleure option.

Les avantages de l’exportation de tableaux HTML

Mettre en place une fonctionnalité d’exportation d’un tableau HTML vers CSV ou Excel présente de nombreux bénéfices, aussi bien pour les développeurs que pour les utilisateurs finaux.

Premièrement, cela améliore considérablement l’expérience utilisateur. Une personne qui consulte un tableau en ligne peut souhaiter le réutiliser dans un autre contexte. Grâce à l’export, elle n’a pas besoin de copier-coller manuellement, ce qui est souvent source d’erreurs.

Deuxièmement, cela favorise le partage de données. Un fichier CSV ou Excel peut facilement être envoyé par mail, stocké sur un disque, ou intégré dans un logiciel tiers.

Troisièmement, cela donne de la valeur ajoutée à votre site. Offrir la possibilité d’exporter des données montre un souci de praticité et de professionnalisme, ce qui peut séduire vos utilisateurs ou vos clients.

Enfin, cela simplifie également vos propres processus si vous gérez un site. Par exemple, si vous avez un tableau de commandes généré par votre back-office, vous pouvez très facilement l’exporter pour en faire un suivi sous Excel.

Exporter un tableau HTML en CSV avec PHP : méthode simple et universelle

Entrons maintenant dans la pratique. Commençons par l’export vers CSV, qui est la méthode la plus simple et la plus répandue.

L’idée est la suivante : vous avez un tableau HTML dans votre page. Lorsque l’utilisateur clique sur un bouton « Exporter », votre script PHP va parcourir les données de ce tableau, les transformer en texte CSV, puis forcer le téléchargement du fichier.

Étape 1 : Créer un tableau HTML à exporter

Imaginons que nous ayons ce tableau affiché dans une page appelée index.php :

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <title>Exemple export CSV</title>
</head>
<body>
    <h1>Liste des utilisateurs</h1>
    <table border="1">
        <tr>
            <th>Nom</th>
            <th>Âge</th>
            <th>Ville</th>
        </tr>
        <tr>
            <td>Paul</td>
            <td>28</td>
            <td>Paris</td>
        </tr>
        <tr>
            <td>Julie</td>
            <td>32</td>
            <td>Lyon</td>
        </tr>
    </table>
    <br>
    <a href="export.php">Exporter en CSV</a>
</body>
</html>

Le lien Exporter en CSV enverra l’utilisateur vers un fichier export.php qui contiendra le code PHP nécessaire pour générer le CSV.

Étape 2 : Préparer les données à exporter

Pour cet exemple, nous allons coder directement les données dans export.php. Mais dans une situation réelle, vous pourriez récupérer les données depuis une base de données MySQL, puis les afficher dans un tableau HTML et les réutiliser pour l’export.

Voici le code du fichier export.php :

<?php
// Définir le nom du fichier CSV
$filename = "export_utilisateurs.csv";

// Définir les en-têtes HTTP pour forcer le téléchargement
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="' . $filename . '"');

// Ouvrir un flux de sortie
$output = fopen('php://output', 'w');

// Écrire l'en-tête du tableau
fputcsv($output, array('Nom', 'Âge', 'Ville'), ';');

// Écrire les lignes de données
fputcsv($output, array('Paul', 28, 'Paris'), ';');
fputcsv($output, array('Julie', 32, 'Lyon'), ';');

// Fermer le flux
fclose($output);
exit;

Explication du code

L’instruction header('Content-Type: text/csv; charset=utf-8'); informe le navigateur que le contenu envoyé est un fichier CSV.
L’instruction header('Content-Disposition: attachment; filename="export_utilisateurs.csv"'); force le téléchargement du fichier avec le nom choisi.

Ensuite, fopen('php://output', 'w') ouvre un flux de sortie direct vers le navigateur.
La fonction fputcsv() écrit une ligne dans ce flux, en séparant les valeurs par le caractère choisi (ici ;).

Le résultat est un fichier CSV prêt à être téléchargé, contenant exactement les données que vous aviez dans votre tableau HTML.

Gérer les cas particuliers avec l’export CSV

Exporter un petit tableau simple est relativement facile. Cependant, dans un contexte réel, vous serez rapidement confronté à plusieurs difficultés que nous allons examiner en détail.

Gestion des grands tableaux

Si votre tableau HTML contient seulement quelques lignes, comme notre exemple avec deux utilisateurs, aucun problème ne se posera. Mais que se passe-t-il si vous devez exporter des milliers de lignes, par exemple toutes les commandes d’un site e-commerce ou toutes les inscriptions d’une base d’élèves ?

Dans ce cas, le fichier CSV généré peut devenir très lourd. Il est donc important d’utiliser php://output comme nous l’avons fait, plutôt que d’écrire d’abord dans un fichier temporaire sur le serveur. Cela permet d’envoyer directement les données au navigateur au fur et à mesure, sans saturer la mémoire.

Une autre astuce consiste à générer les données par lots (batch), surtout si elles viennent d’une base de données. Vous pouvez récupérer 1000 lignes, les envoyer dans le flux CSV, puis passer aux 1000 suivantes. Cela évite de charger toute la base en mémoire.

Formation web et informatique - Alban Guillier - Formateur

Des formations informatique pour tous !

Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…

Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.

Découvrez mes formations Qui suis-je ?

Encodage et accents

Un autre problème fréquent concerne l’encodage des caractères spéciaux. Si vos données contiennent des accents, comme « École », « Noël » ou « François », il est possible qu’ils apparaissent mal dans Excel une fois exportés.

Pour éviter cela, il est conseillé d’ajouter une ligne spéciale au début du fichier CSV : le BOM (Byte Order Mark) UTF-8. Concrètement, vous pouvez modifier le code ainsi :

// Ouvrir le flux de sortie
$output = fopen('php://output', 'w');

// Ajouter le BOM pour UTF-8
fwrite($output, "\xEF\xBB\xBF");

De cette manière, Excel reconnaîtra correctement l’encodage et affichera vos accents sans problème.

Choisir le séparateur

Nous avons utilisé le point-virgule ; comme séparateur, car en France et dans beaucoup de pays européens, Excel attend ce séparateur par défaut. Aux États-Unis, c’est plutôt la virgule , qui est utilisée.

Vous pouvez donc adapter votre code en fonction de votre public cible, ou même offrir une option à vos utilisateurs pour choisir leur séparateur préféré.

Présentation de la bibliothèque PhpSpreadsheet

Exporter en CSV est rapide et efficace, mais parfois trop limité. Si vous voulez aller plus loin et offrir à vos utilisateurs des fichiers Excel professionnels, avec la possibilité d’ajouter de la mise en forme, des formules ou même plusieurs feuilles dans un même fichier, il faut passer à une bibliothèque plus complète.

La référence actuelle en PHP est PhpSpreadsheet.

Qu’est-ce que PhpSpreadsheet ?

PhpSpreadsheet est une bibliothèque open source écrite en PHP, qui permet de lire et d’écrire différents formats de tableurs, dont Excel (XLSX et XLS), OpenDocument (ODS), CSV et bien d’autres.

C’est l’évolution moderne de l’ancienne bibliothèque PHPExcel, qui n’est plus maintenue. PhpSpreadsheet bénéficie d’une communauté active et de mises à jour régulières.

Pourquoi utiliser PhpSpreadsheet ?

L’intérêt principal de PhpSpreadsheet est sa puissance et sa flexibilité. Avec elle, vous pouvez non seulement exporter des données simples, mais aussi :

  • Créer des fichiers Excel complexes avec plusieurs feuilles.
  • Appliquer des styles (gras, italique, couleurs, bordures).
  • Insérer des images et des graphiques.
  • Définir des formules Excel directement depuis PHP.
  • Gérer de gros volumes de données de manière optimisée.

C’est l’outil idéal si vous voulez offrir une fonctionnalité d’export Excel digne d’un logiciel professionnel.

Installation de PhpSpreadsheet

Pour utiliser PhpSpreadsheet, il faut installer la bibliothèque via Composer, le gestionnaire de dépendances PHP. Si vous ne l’avez pas encore, vous pouvez l’installer en suivant la documentation officielle de Composer.

Dans votre projet, ouvrez un terminal et tapez :

composer require phpoffice/phpspreadsheet

Une fois installé, vous pourrez utiliser PhpSpreadsheet dans vos scripts PHP grâce à l’autoload de Composer.

Pour en savoir plus, consultez Composer, le tutoriel complet : Installation et utilisation.

Exporter un tableau HTML en Excel (XLSX) avec PhpSpreadsheet

Passons maintenant à la pratique : voyons comment exporter un tableau HTML vers un fichier Excel au format XLSX.

Étape 1 : Préparer les données

Comme pour le CSV, vous avez déjà un tableau HTML affiché sur votre site. Pour l’exemple, reprenons notre tableau d’utilisateurs :

<table border="1">
    <tr>
        <th>Nom</th>
        <th>Âge</th>
        <th>Ville</th>
    </tr>
    <tr>
        <td>Paul</td>
        <td>28</td>
        <td>Paris</td>
    </tr>
    <tr>
        <td>Julie</td>
        <td>32</td>
        <td>Lyon</td>
    </tr>
</table>

Étape 2 : Générer un fichier Excel avec PhpSpreadsheet

Créons un fichier export_xlsx.php qui utilisera PhpSpreadsheet pour générer le fichier XLSX.

<?php
require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

// Créer un nouvel objet Spreadsheet
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

// Ajouter les en-têtes
$sheet->setCellValue('A1', 'Nom');
$sheet->setCellValue('B1', 'Âge');
$sheet->setCellValue('C1', 'Ville');

// Ajouter les données
$sheet->setCellValue('A2', 'Paul');
$sheet->setCellValue('B2', 28);
$sheet->setCellValue('C2', 'Paris');

$sheet->setCellValue('A3', 'Julie');
$sheet->setCellValue('B3', 32);
$sheet->setCellValue('C3', 'Lyon');

// Définir le nom du fichier
$filename = "export_utilisateurs.xlsx";

// Envoyer les en-têtes HTTP
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="' . $filename . '"');
header('Cache-Control: max-age=0');

// Créer l'écrivain et sauvegarder dans la sortie
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
exit;

Explication du code

Nous créons d’abord un objet Spreadsheet, qui représente un fichier Excel. Avec $spreadsheet->getActiveSheet(), nous récupérons la première feuille.

Nous insérons ensuite des valeurs dans des cellules grâce à setCellValue(). Par exemple, setCellValue('A1', 'Nom') place le mot « Nom » dans la cellule A1 (colonne A, ligne 1).

Enfin, nous utilisons un objet Xlsx pour écrire le fichier au format Excel, et l’envoyons directement au navigateur avec php://output.

Résultat

Lorsque vous accédez à export_xlsx.php, un fichier Excel est automatiquement téléchargé. En l’ouvrant, vous retrouvez vos données dans un tableau parfaitement lisible.

Aller plus loin avec PhpSpreadsheet

Maintenant que vous avez compris la base, vous pouvez enrichir vos fichiers Excel de nombreuses manières. Voici quelques pistes pour améliorer vos exports.

Appliquer du style

Vous pouvez rendre vos fichiers plus agréables en appliquant du style aux cellules. Par exemple, pour mettre les en-têtes en gras :

$sheet->getStyle('A1:C1')->getFont()->setBold(true);

Vous pouvez aussi ajouter des bordures, changer la couleur de fond, ajuster la largeur des colonnes automatiquement :

foreach (range('A', 'C') as $col) {
    $sheet->getColumnDimension($col)->setAutoSize(true);
}

Ajouter plusieurs feuilles

PhpSpreadsheet permet de créer plusieurs feuilles dans un même fichier Excel, ce qui peut être très pratique si vous avez différentes catégories de données.

$newSheet = $spreadsheet->createSheet();
$newSheet->setTitle('Deuxième feuille');
$newSheet->setCellValue('A1', 'Autres données');

Insérer des formules

Vous pouvez même insérer des formules Excel directement depuis PHP. Par exemple, pour calculer la moyenne d’une colonne :

$sheet->setCellValue('B4', '=AVERAGE(B2:B3)');

Nous avons parcouru un chemin complet dans ce tutoriel : de la compréhension de ce qu’est un tableau HTML à la mise en place d’un export CSV simple, puis à l’utilisation de la bibliothèque PhpSpreadsheet pour générer de véritables fichiers Excel au format XLSX.

Vous avez vu que le CSV est la solution la plus rapide et universelle, idéale si vous cherchez une méthode légère et efficace. Il est parfait pour des exports de données simples et lisibles par tous les logiciels de tableur.

De son côté, le format XLSX ouvre un champ de possibilités beaucoup plus large. Grâce à PhpSpreadsheet, vous pouvez créer des fichiers Excel riches, avec mise en forme, formules, et même plusieurs feuilles. Cette approche est idéale si vous voulez offrir à vos utilisateurs une expérience professionnelle et valoriser encore plus vos données.

La décision entre CSV et XLSX dépendra donc de vos besoins et de ceux de vos utilisateurs. Dans tous les cas, vous disposez maintenant des clés pour mettre en place une solution robuste d’export de tableau HTML avec PHP.

Mais au-delà de la technique, souvenez-vous que proposer une fonctionnalité d’export n’est pas seulement une question de code. C’est avant tout une façon de rendre vos données utiles, accessibles et exploitables, ce qui augmente la valeur perçue de votre site web et la satisfaction de vos utilisateurs.

Live on Twitch