Forums Développement Multimédia

Aller au contenu

Problème PHP_writeexcel

CODE PHP MySQL

21 réponses à ce sujet

#1 guillaume.thomas

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 51 messages

Posté 07 June 2006 - 12:46 PM

Bonjour,

J'ai cherché pendant un bon moment un bon moyen de generer des fichiers xls a partir de PHP et je suis tombé sur PHP_writeexcel (qui a l'air vraiment complet). Seul problème c'est que j'arrive pas a m en servir, j'ai regardé les exemples, cherché sur le net mais j'ai toujours des erreurs que je ne comprend pas. Alors si quelqu'un utilise ces classes, je requiert son aide en echange d'une gratitude immense ... icon_biggrin.gif

Voila, tenez moi au courant.

A plus.

#2 Matthieu!

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 4003 messages

Posté 07 June 2006 - 12:48 PM

Salut smile.gif

Ce qui serait bien c'est qu'on puisse profiter de tes erreurs pour pouvoir te guider wink.gif

#3 guillaume.thomas

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 51 messages

Posté 07 June 2006 - 12:56 PM

Ok, lol, j'voulais deja savoir si quelqu'un utilisait ces classes. Donc mes erreurs apparaissent en faisant un petit test (mais j'imagine qu'elle seront recurente si je fait des trucs plus gros). Deja voila mon code qui est censé créer un fichier xls :

Code
<?php
require_once "class.writeexcel_workbook.inc.php";
require_once "class.writeexcel_worksheet.inc.php";

$fname = tempnam("/tmp", "test.xls");
$workbook = &new writeexcel_workbook($fname);

//Quelques formats commun
$center  =& $workbook->addformat(array('align' => 'center'));
$heading =& $workbook->addformat(array('align' => 'center', 'bold' => 1));

$worksheet1 =& $workbook->addworksheet('Named colors');
$worksheet1->set_column(0, 3, 15);
$worksheet1->write(0, 0, "Index", $heading);
$worksheet1->write(0, 1, "Index", $heading);
$worksheet1->write(0, 2, "Name",  $heading);
$worksheet1->write(0, 3, "Color", $heading);

$colors = array('black'=>0x08,'blue'=>0x0C,'brown'=>0x10,'cyan'=>0x0F,'gray'=>0x17,'green'=>0x11,'lime'=>0x0B,'magenta'=>0x0E,'navy'=>0x12,'orange'=>0x35,'purple'=>0x14,'red'=>0x0A,'silver'=>0x16,'white'=>0x09,'yellow'=>0x0D);

for ($i=8;$i<=63;$i++){
$format =& $workbook->addformat(array('fg_color'=>$i,'pattern'=>1,'border'=>1));
  $worksheet1->write(($i -7), 2, '',$format);
}
?>


Et donc les erreurs que j'obtient :

Code
Notice: Undefined offset: 4 in c:\program files\easyphp1-8\www\application\class.writeexcel_worksheet.inc.php on line 435

Notice: Undefined offset: 3 in c:\program files\easyphp1-8\www\application\class.writeexcel_worksheet.inc.php on line 436


En sachant que j'ai pas touché au contenu de class.writeexcel_worksheet.inc.php et de class.writeexcel_worksheet.inc.php.

#4 guillaume.thomas

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 51 messages

Posté 07 June 2006 - 14:18 PM

Je cherche, je cherche ... mais toujours pas de solution ... icon_sad.gif

#5 Matthieu!

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 4003 messages

Posté 07 June 2006 - 14:24 PM

Euh moi je ne connais pas le fichier class.writeexcel_worksheet.inc.php tu pourrais montrer les lignes 435 et 436 et même la fonction en entière (si elle fait pas 40lignes wink.gif)

#6 guillaume.thomas

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 51 messages

Posté 07 June 2006 - 14:28 PM

Alors bon c est un fichier qui a enormement de ligne, voila les ligne 435 et 436 :

Code
   $width  = $_[4] ? 0 : $_[2]; # Set width to zero if column is hidden
   $format = $_[3];


Et j'poste aussi le fichier mais il est enorme.

[attachmentid=2647]

Fichier(s) joint(s)



#7 Matthieu!

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 4003 messages

Posté 07 June 2006 - 14:34 PM

Php
function set_column() {
 
$_=func_get_args();
 
$cell = $_[0];
 
# Check for a cell reference in A1 notation and substitute row and column
if (preg_match('/^\D/', $cell)) {
$_ = $this->_substitute_cellref($_);
}
 
array_push($this->_colinfo, $_);
 
# Store the col sizes for use when calculating image vertices taking
# hidden columns into account. Also store the column formats.
#
if (sizeof($_)<3) {
# Ensure at least $firstcol, $lastcol and $width
return;
}
 
$width = $_[4] ? 0 : $_[2]; # Set width to zero if column is hidden
$format = $_[3];
 
list($firstcol, $lastcol) = $_;
 
for ($col=$firstcol;$col<=$lastcol;$col++) {
$this->_col_sizes[$col] = $width;
if ($format) {
$this->_col_formats[$col] = $format;
}
}
}


Juste la fonction pour se rendre compte des variables smile.gif

#8 guillaume.thomas

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 51 messages

Posté 07 June 2006 - 15:57 PM

Bon, j'suis toujours bloqué, j'arrive pas a comprendre d'ou vient ce probleme ... j'ai en plus de ca essayé toutes les autres manieres d'exporter de php vers un fichier excel (biffwriter, php simple excel file generator, pear/excel et sylk) mais sans succes ...
J'ai besoin de vos lumieres la icon_biggrin.gif

#9 guillaume.thomas

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 51 messages

Posté 07 June 2006 - 16:25 PM

Personne n'a jamais utilisé cette classe, ni n'as eu ce genre de problème ???

#10 qwix1327245690

  • Members
  • PipPipPipPipPipPipPipPip
  • 7599 messages

Posté 07 June 2006 - 18:02 PM

Deux solutions:
Soit tu utilise mal la fonction
Soit c'est un bug avec le système, auquel cas, le mieux est de contacter directement les auteurs de ce paquet, tu auras une réponse surement plus efficace.

smile.gif

#11 k-leb

    Ceinture Blanche

  • Members
  • Pip
  • 2 messages

Posté 16 June 2006 - 08:26 AM

J'ai eu le même problème. Il s'agit, comme indiqué ci-dessus, d'un problème de version php.

Dans les nouvelles versions, php demande que les variables soient déclarées pour pouvoir être utilisées.
Dans php_writeexcel, le problème est que des fonction utilise un nombre variable de paramètres. On peut spécifier ou non par exemple un format pour une case du futur fichier excel. Ainsi, php_writeexcel fait toujours comme si tous les paramètres sont spécifiés, mais lorsque ce n'est pas le cas, il y a un problème car il va essayer d'utiliser une variable qui n'existe pas.

Bref, officiellement, la solution serait de s'assurer que toutes les variables soeitn déclarées ce qui demande une réécriture de certains passages du code de writeexcel.

Plus simple? Il suffit d'écrire cela au début du fichier php.
error_reporting(E_ALL ^ E_NOTICE);

(explication: les erreurs de variables non déclarées ne sont pas fatales mais php nous rend attentif. Il s'agit donc d'erreurs de type "Notice". Avec la ligne ci-dessus, on demande à php de ne pas tenir compte des Notice mais seulement des autres erreurs plus graves. Ainsi, php va passer outre les problèmes évoqués ci-dessus. Pour les puristes, il y a un risque de faire des fautes de codage et de ne pas s'ên rendre compte. Il peut ainsi être judicieux de désactivé la ligne de temps à autre pour vérifier les erreurs...).

#12 abidi_niz

    Ceinture Blanche

  • Members
  • Pip
  • 2 messages

Posté 11 July 2006 - 09:07 AM

J'ai utilisé la classe "workbookbig.php" pour pouvoir supporter mes fichiers Excels générés qui ont une grande taille, mais j'aurais toujours des erreurs tous de même type : Undefined property" pour une propriété dans un des packages :class.ole_pps_file ou class.ole_pps_dir ou class.ole_pps_root ou class.ole_pps
Ces fichiers volumineux quand je les génére avec la classe "workbook.php" se reproduit endommagés(corrompus) et ne peuvent pas s'ouvrir avce MS Excel.
avez vous une idée comment résoudre ceci.

#13 zebden

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 1395 messages

Posté 11 July 2006 - 10:48 AM

Lu,

Bah en fait c'est extra simple.

dans la fonction : $_= func_get_args();

cela va donc retourner un tableau avec les paramètres que tu auras passés.

or ici : $worksheet1 -> set_column(0, 3, 15); tu n'en passes que 3 donc :

$_[0] existe
$_[1] existe
$_[2] existe

$_[3] existe pas => Erreur undefined
$_[4] existe pas => Erreur undefined

Il faut alors utiliser isset dans la fonction pour tester l'existence ou non.

#14 zebden

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 1395 messages

Posté 11 July 2006 - 10:53 AM

Je rajoute :

C'est un peu bizarre pour passer des paramètres de cette façon, j'avoue que c'est pas du tout intuitif.

pourquoi pas faire :

function set_column($param1 = '', $param2 = '', $param3 = '', .. , $paramx = '') ? Dans ce cas la d'une part les paramètres existent de toute façon et peuvent prendre des valeurs par défaut ou être obligatoire. Bref une méthode tout à fait normale.

#15 zebden

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 1395 messages

Posté 11 July 2006 - 10:55 AM

Flood :

Oups je répondais à la question de base.

undefined property => propriété indéfinie .. Sans ton code, on peut pas trop aider.

#16 qwix1327245690

  • Members
  • PipPipPipPipPipPipPipPip
  • 7599 messages

Posté 11 July 2006 - 19:12 PM

Bonsoir smile.gif

Ce n'est pas un erreur de PHP en tant que langage, mais bien une erreur d'utilisation du code. En effet la solution que tu propose n'est pas correcte, la déclaration ou pas des variables n'a rien à voir dans ce cas, le problème posé, ce sont des cases de tableaux auxquelles il tente d'accéder mais elles n'existent pas d'ou le message d'erreur.

Le fait de changer le niveau de rapport d'erreur ne fait que masquer le problème, et ne le résoud en rien, c'est un peu comme si on essayait de soigner un cancer à grand coup de pansements.

La solution dans ce cas, est de revoir soit l'algorithme qui utilise l'API phpwriteexcel, soit c'est un problème avec la librairie elle même. Ne sachant pas l'utiliser, je ne peux pas vraiment dire d'ou ça vient, surtout qu'on a pas énormément d'infos non plus pour pouvoir se faire une idée d'ou peut bien venir le problème.

smile.gif
k-leb (Jun 16 2006, 09:26 AM) a dit :
J'ai eu le même problème. Il s'agit, comme indiqué ci-dessus, d'un problème de version php.

Dans les nouvelles versions, php demande que les variables soient déclarées pour pouvoir être utilisées.
Dans php_writeexcel, le problème est que des fonction utilise un nombre variable de paramètres. On peut spécifier ou non par exemple un format pour une case du futur fichier excel. Ainsi, php_writeexcel fait toujours comme si tous les paramètres sont spécifiés, mais lorsque ce n'est pas le cas, il y a un problème car il va essayer d'utiliser une variable qui n'existe pas.

Bref, officiellement, la solution serait de s'assurer que toutes les variables soeitn déclarées ce qui demande une réécriture de certains passages du code de writeexcel.

Plus simple? Il suffit d'écrire cela au début du fichier php.
error_reporting(E_ALL ^ E_NOTICE);

(explication: les erreurs de variables non déclarées ne sont pas fatales mais php nous rend attentif. Il s'agit donc d'erreurs de type "Notice". Avec la ligne ci-dessus, on demande à php de ne pas tenir compte des Notice mais seulement des autres erreurs plus graves. Ainsi, php va passer outre les problèmes évoqués ci-dessus. Pour les puristes, il y a un risque de faire des fautes de codage et de ne pas s'ên rendre compte. Il peut ainsi être judicieux de désactivé la ligne de temps à autre pour vérifier les erreurs...).

Voir le message




#17 chotana

    Ceinture Blanche

  • Members
  • Pip
  • 2 messages

Posté 31 January 2007 - 17:13 PM

Bonjour à toutes et à tous ;

Voici en pièce jointe le code phpWriteExcel en partie débuggé ; il marche dans 95% des cas d'exemples, suffisant pour ce qu'on veut faire. Pour voir les corrections, faites simplement un différentiel entre la version officielle et cette version ; vous verrez, c'était pas sorcier... il suffisait de tester correctement le passage des variables et de leur donner une valeur par défaut... ils ont vraiment codé comme des cochons icon_mad.gif

Avis aux développeurs, n'hésitez pas à continuer de débugger ce truc, c'est open source et je pense que ça a un très bel avenir devant lui...

PS : j'ai testé sous Windows avec EasyPHP 1.8.0.1 (Apache 1.3.33 et PHP 4.3.10) et ça marche icon_biggrin.gif

gourou.gif Chotana gourou.gif

Fichier(s) joint(s)



#18 developpeur.mediabox.fr

    Ceinture Blanche

  • Members
  • Pip
  • 2 messages

Posté 14 June 2007 - 14:54 PM

J'allais jeter l'éponge sur ces librairies qui semblaient bien...
Ca va beaucoup mieux avec les codes corrigés icon_biggrin.gif
Mille mercis Chotana! gourou.gif



#19 info

    Ceinture Blanche

  • Members
  • Pip
  • 2 messages

Posté 08 September 2007 - 18:23 PM

bonjour,

merci pour ces modifs
par contre je l'utilise pour créer des exports de données via mysql, les fichiers excel sont créés correctement, mais j'ai voulu lire les données du fichiers excel avec phpexcelreader et un script qui crée un tableau des données récupérées et en fait ca ne fonctionne pas car apparement les fichiers excel créé avec php_writeexcel ne contient pas le nombre de ligne et de colonne, alors que si j'ouvre ce même fichier et que je l'enregistre avec Excel cette fois ci mon script de lecture du fichier fonctionne.

je peux fournir les scripts si besoin.

merci
Régis

#20 c_e_rultim

    Ceinture Blanche

  • Members
  • Pip
  • 2 messages

Posté 18 May 2009 - 13:15 PM

Bonjour a tous,

désolé de déterrer un message vieux de 2 ans, mais j'aimerais avoir votre avis sur les sources corrigées postées par Chotana.

Concernant l'insertion d'un bitmap, je ne parviens pas à avoir une insertion qui respecte l'échelle d'origine. Pas de problème au niveau des Y, mais la largeur (X) n'est jamais respectée. Elle est toujours plus petite que sur l'image d'origine, même lorsque je tente de modifier le param X_scale que prends en compte la fonction :

$worksheet->insert_bitmap('0','A', 'ctrlogo.bmp',0,0,1,1);

Si quelqu'un passe par ici et a déjà été confronté au problème ou voit une solution, ce serait très gentil de me donner un coup de pouce.

Cordialement

#21 web

    Ceinture Blanche

  • Members
  • Pip
  • 2 messages

Posté 08 June 2009 - 14:33 PM

Merci Chotana, ça marche nickel wink.gif


#22 nboutron

    Ceinture Blanche

  • Members
  • Pip
  • 1 messages

Posté 20 October 2013 - 10:56 AM

Génial !! le nouveau code de Chotana, juste un petit correctif dans le code de la feuille class.writeexcel_workbook.inc.php il faut remplacer
&new par new pour que cela fonctionne à partir de php 5.3
Mais il manquait beaucoup d'autres éléments et grâce au correctif de Chotana, tout roule à merveille ! Merci pour cette super contribution !!



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP