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
'
);
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.
3.4. Multi feuilles (sheets)▲
Ici nous allons voir comment faire pour avoir plusieurs feuilles dans le tableur.
Le fait d'avoir plusieurs feuilles ne vous permettra pas de générer le tableur dans les formats suivants :
- 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
'
);