IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Introduction à PHPExcel

Date de publication : 05/02/2009 , Date de mise à jour : 14/07/2010


Pour la suite...créons nos outils
3.1. Etendre PHPExcel
3.2. Petit exemple
3.3. Les formules
3.4. Multi feuilles (sheets)


Pour la suite...créons nos outils

Pour la suite de cet article, je me baserai sur l'affichage du tableur.
Afin de ne pas réécrire l'ensemble des codes, je vais étendre la classe PHPExcel, et commencer à  créer des outils personnalisés pour la génération des fichiers.


3.1. Etendre PHPExcel

Soit la nouvelle classe suivante :

/**
 * Classe étendue de PHPExcel.
 * Cette classe permet la génération dynamique
 * de fichier tableur suivant différent format.
 *
 * @copyright  2008 MaitrePylos Technologies (Formatux.be)
 * @author     Ernaelsten Gerard
 * @license    GPL
 * @version    Release: 0.1
 */

require 'PHPExcel.php';
class MaitrePylosExcel extends PHPExcel {


    public function  __construct() {
        parent::__construct();
    }

    /**
     * Méthode englobant une fonction switch pour le choix du format de tableur.
     * @method affiche
     * @param String $format
     * @param String $nomFichier
     * @example $workbook->affiche('Excel2007','MonFichier');
     */
    public function affiche($format = 'Excel5',$nomFichier = 'Tableur'){

        switch($format){
            case 'Excel2007' :
                include 'PHPExcel/Writer/Excel2007.php';
                $writer = new PHPExcel_Writer_Excel2007($this);
                $ext  = 'xlsx';
                $header = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
                //supprime le pré-calcul
                $writer->setPreCalculateFormulas(false);
                break;
            case 'Excel2003' :
                include 'PHPExcel/Writer/Excel2007.php';
                $writer = new PHPExcel_Writer_Excel2007($this);
                $writer->setOffice2003Compatibility(true);
                $ext  = 'xlsx';
                $header = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
                //supprime le pré-calcul
                $writer->setPreCalculateFormulas(false);
                break;
            case 'Excel5' :
                include 'PHPExcel/Writer/Excel5.php';
                $writer = new PHPExcel_Writer_Excel5($this);
                $ext = 'xls';
                $header = 'application/vnd.ms-excel';
                break;
            case 'CSV' :
                include 'PHPExcel/Writer/CSV.php';
                $writer  = new PHPExcel_Writer_CSV($this);
                $writer->setDelimiter(",");//l'opérateur de séparation est la virgule
                $writer->setSheetIndex(0);//Une seule feuille possible
                $ext = 'csv';
                $header = 'text/csv';
                break;
            case 'PDF' :
                include 'PHPExcel/Writer/PDF.php';
                $writer  = new PHPExcel_Writer_PDF($this);
                $writer->setSheetIndex(0);//Une seule feuille possible
                $ext = 'pdf';
                $header = 'application/pdf';
                break;
            case 'HTML' :
                include 'PHPExcel/Writer/HTML.php';
                $writer  = new PHPExcel_Writer_HTML($this);
                $writer->setSheetIndex(0);//Une seule feuille possible
                $ext = 'html';
                $header = 'text/html';
                break;

        }

        header('Content-type:'.$header);
        header('Content-Disposition:inline;filename='.$nomFichier.'.'.$ext);
        $writer->save('php://output');
    }

        /**
     * Méthode englobant une fonction switch pour le choix du format de tableur.
     * @method enregistre
     * @param String $format
     * @param String $nomFichier
     * @example $workbook->enregistre('Excel2007','MonFichier');
     */
    public function enregistre($format = 'Excel5',$nomFichier = 'Tableur'){

        switch($format){
            case 'Excel2007' :
                include 'PHPExcel/Writer/Excel2007.php';
                $writer = new PHPExcel_Writer_Excel2007($this);
                $ext  = 'xlsx';
                //supprime le pré-calcul
                $writer->setPreCalculateFormulas(false);
                break;
            case 'Excel2003' :
                include 'PHPExcel/Writer/Excel2007.php';
                $writer = new PHPExcel_Writer_Excel2007($this);
                $writer->setOffice2003Compatibility(true);
                $ext  = 'xlsx';
                //supprime le pré-calcul
                $writer->setPreCalculateFormulas(false);
                break;
            case 'Excel5' :
                include 'PHPExcel/Writer/Excel5.php';
                $writer = new PHPExcel_Writer_Excel5($this);
                $ext = 'xls';
                break;
            case 'CSV' :
                include 'PHPExcel/Writer/CSV.php';
                $writer  = new PHPExcel_Writer_CSV($this);
                $writer->setDelimiter(",");//l'opérateur de séparation est la virgule
                $writer->setSheetIndex(0);//Une seule feuille possible
                $ext = 'csv';
                break;
            case 'PDF' :
                include 'PHPExcel/Writer/PDF.php';
                $writer  = new PHPExcel_Writer_PDF($this);
                $writer->setSheetIndex(0);//Une seule feuille possible
                $ext = 'pdf';
                break;
            case 'HTML' :
                include 'PHPExcel/Writer/HTML.php';
                $writer  = new PHPExcel_Writer_HTML($this);
                $writer->setSheetIndex(0);//Une seule feuille possible
                $ext = 'html';
                break;

        }

        $writer->save($nomFichier.'.'.$ext);

    }
}
                

3.2. Petit exemple

Nous utiliserons cette classe de cette façon :


include 'MaitrePylosExcel.php';

$workbook = new MaitrePylosExcel();

$sheet = $workbook->getActiveSheet();
$sheet->setCellValue('A1','MaitrePylos');

$workbook->affiche('Excel2007','MonPremierFichier');

                
warning Vous prêterez attention au fait que dans l'article j'utilise la variable $sheet, qui sera le remplacement de $workbook->getActiveSheet(), dans les exemples fournis par l'application, ils utiliseront plus l'écriture $workbook->getActiveSheet()->getFont(), or je privilégie $sheet->getFont(), gardez bien cela à  l'esprit.

3.3. Les formules

Pour introduire des formules dans le fichier , il suffit de passer en argument la dite formule.


include 'MaitrePylosExcel.php';

$workbook = new MaitrePylosExcel();

$sheet = $workbook->getActiveSheet();
$sheet->setCellValue('A1',4);
$sheet->setCellValue('A2',5);
$sheet->setCellValue('A3','=SUM(A1:A2)');

$workbook->affiche('Excel2007','MaPremiereFormule');

                

3.4. Multi feuilles (sheets)

Ici nous allons voir comment faire pour avoir plusieurs feuilles dans le tableur.

warning Le fait d'avoir plusieurs feuilles ne vous permettra pas de générer le tableur dans les formats suivants :
  • PDF
  • CSV
  • HTML
Ces format ne permettant que la génération d'une seule feuille.

Lors de la création de votre document, une feuille est automatiquement créée, et nous en prenons possession avec la méthode getActiveSheet().


include 'MaitrePylosExcel.php';

$workbook = new MaitrePylosExcel();

$sheet = $workbook->getActiveSheet();

$workbook->affiche('Excel2007','MaPremiereFormule');

                
Pour donner un nom à  cette feuille, on utilise la méthode setTitle()

  $sheet->setTitle('feuille 1');
                
Pour créer de nouvelles feuilles, nous utiliserons la méthode createSheet() de la classe PHPExcel, qui elle même instancie la classe PHPExcel_WoorkSheet.

/*********************************************************
         *
         * Création de la deuxième feuille
         *******************************************************/
        //création de la nouvelle feuille
        $sheet2 = $workbook->createSheet();
        //nom de la feuille
        $sheet2->setTitle('feuille 2');



       /*********************************************************
       *
       * Création de la troisème feuille
       *******************************************************/
        $sheet3 = $workbook->createSheet();
        $sheet3->setTitle('feuille 3');


        /*********************************************************
       *
       * Création de la quatrième feuille
       *******************************************************/
        $sheet4 = $workbook->createSheet();
        $sheet4->setTitle('feuille 4');

                
 

Valid XHTML 1.0 TransitionalValid CSS!

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à  l'obtention préalable de l'autorisation de l'auteur.