Export binaire vers Excel

Objectif

L’objectif de ces 4 fonctions est de générer un fichier Excel à la volée depuis une page PHP. Le contenu de la feuille Excel provient de deux tableaux PHP.

Code

<?php
function xlsBOF() { 
    echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0); 
    return; 
} 
function xlsEOF() { 
    echo pack("ss", 0x0A, 0x00); 
    return; 
}
function xlsWrite($Row, $Col, $Value ) { 
    $L = strlen($Value); 
    echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L); 
    echo $Value; 
    return; 
}
function xlsGenerateFile($headers,$content,$filename)
{
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");;
    header("Content-Disposition: attachment;filename=$filename "); 
    header("Content-Transfer-Encoding: binary ");
    xlsBOF();

    // Make column labels from array $headers
    for($i=0;$i<count($headers);$i++)
    {
        xlsWriteLabel(0,$i,$headers[$i]);
    }
    $xlsRow = 1;

    // Put data records from array $content
    for($i=0;$i<count($content);$i++)
    {
        $xlsCol = 0;
        foreach($content[$i] as $key=>$value)
        {
            xlsWrite($xlsRow,$xlsCol,$value);
            $xlsCol++;
        }
        $xlsRow++;
    } 
    xlsEOF();
    exit();
}

Explications

La fonction xlsBOF() initialise le fichier.

La fonction xlsEOF() termine le fichier

La fonction xlsWrite() va écrire une ligne dans le fichier Excel.

La fonction xlsGenerateFile() va quand à elle utiliser les fonctions précédentes pour générer le fichier Excel.

Elle modifie les headers en premier lieu (ce qui signifie que cette fonction doit être utilisée dans une page PHP n’ayant pas encore initialisé d’headers!) afin que le fichier généré soit traité comme un fichier Excel par le navigateur.

Elle va ensuite écrire une première ligne avec l’ensemble des entêtes de colonnes qui seront contenues dans le tableau $headers.

Puis elle va parcourir le tableau de contenu $content (tableau à 2 dimensions) pour remplir le fichier excel. Typiquement ce tableau est un résultat d’une requête mySQL.

Exemple

Petit exemple pour montrer le fonctionnement.

<?php
$headers = array("Num.", "Utilisateur", "Chemin");
$content[0]['num'] = "1";
$content[0]['user'] = "Foo";
$content[0]['path'] = "/home/foo";
$content[1]['num'] = "2";
$content[1]['user'] = "Bar";
$content[1]['path'] = "/home/Bar";

xlsGenerateFile($headers,$content,'users.xls')";

Dans cet exemple, le tableau $content est le résultat d’une requête SQL. Le résultat sera donc le suivant:

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *