1 pièce(s) jointe(s)
[WriteExcel] Duplication d'objet
Bonjour,
Je rencontre un problème avec l'usage de la bibliothèque WriteExcel en php5
J'ai de nombreux type de format à définir pour mettre en page un document excel à générer. Pour gagner du temps, j'ai voulu définir un format de base et le "cloner". J'affecte alors des valeurs différentes au propriété de mes formats finaux. Le problème que je rencontre est lorsque j'applique mon format modifié à une cellule, ce sont les valeurs des propriétés de mon objet initial qui sont utilisées. Exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| <?php
require_once "class.writeexcel_workbook.inc.php";
require_once "class.writeexcel_worksheet.inc.php";
$fname = tempnam("/tmp", "test2.xls");
$workbook = &new writeexcel_workbook($fname);
$worksheet = $workbook->addworksheet();
//je definit mon 1er format de cellule en violet :
$FormatViolet = $workbook->addformat();
$FormatViolet ->set_bold();
$FormatViolet ->set_pattern(0x1);
$FormatViolet ->set_border_color('black');
$FormatViolet ->set_top(2);
$FormatViolet ->set_bottom(2);
$FormatViolet ->set_right(2);
$FormatViolet ->set_left(2);
$FormatViolet ->set_align('center');
$FormatViolet ->set_align('vcenter');
$FormatViolet ->set_text_wrap();
$FormatViolet ->set_fg_color(31);
// je duplique l'objet et je changer la couleur pour du rose
$FormatRose = clone $FormatViolet;
$FormatRose ->set_fg_color(29);
// je crée un troisième objet qui est le même que celui dupliqué mais
// qui lui n'est pas cloné.
$FormatRose2 = $workbook->addformat();
$FormatRose2 ->set_bold();
$FormatRose2 ->set_pattern(0x1);
$FormatRose2 ->set_border_color('black');
$FormatRose2 ->set_top(2);
$FormatRose2 ->set_bottom(2);
$FormatRose2 ->set_right(2);
$FormatRose2 ->set_left(2);
$FormatRose2 ->set_align('center');
$FormatRose2 ->set_align('vcenter');
$FormatRose2 ->set_text_wrap();
$FormatRose2 ->set_fg_color(29);
$worksheet->set_column(0, 2, 50);
$worksheet->set_row(0, 30);
// Début ecriture
$worksheet->write(0,0,"Cellule 1 / Couleur : " .$FormatViolet->_fg_color, $FormatViolet);
$worksheet->write(0,1,"Cellule 2 / Couleur : " .$FormatRose ->_fg_color, $FormatRose);
$worksheet->write(0,2,"Cellule 3 / Couleur : " .$FormatRose2 ->_fg_color, $FormatRose2);
$workbook->close();
header("Content-Type: application/x-msexcel; name=\"devis.xls\"");
header("Content-Disposition: inline; filename=\"devis.xls\"");
$fh=fopen($fname, "rb");
fpassthru($fh);
unlink($fname);
?> |
le resultat :
J'ai une première cellule qui est violette et qui m'affiche le code couleur 31 soit "violet",
Une seconde cellule qui est violette et qui m'affiche le code couleur 29 soit "rose",
la troisième est bien rose avec le code couleur "rose".
Quelqu'un sait il m'expliquer pourquoi ma seconde colonne ne tiens pas compte de la valeur de ma propriété "_fg_color" de mon objet FormatRose ? C'est juste par curiosité parce que quelque chose m'échappe...
Merci à tous.