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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[WriteExcel] Undefined offset


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Par défaut [WriteExcel] Undefined offset
    Bonjour,

    j'utilise la librairie Writeexcel pour générer des fichiers Excel et avec display_errors à on, j'ai un tas d'erreur de type : "Undefined offset 4 in ...\WriteExcel\class.writeexcel_worksheet.inc.php on line 435" ou "Undefined offset: 3 in ...\WriteExcel\class.writeexcel_worksheet.inc.php on line 1209" ou encore "Undefined offset: 3 in ...\WriteExcel\class.writeexcel_worksheet.inc.php on line 1152".

    La ligne 435 du fichier class.writeexcel_worksheet.inc.php est dans la fonction set_column, la ligne 1209 à la fonction write_string() et la ligne 1152 à la fonction write_number().

    J'appelle ces 3 fonctions de cette manière dans mon fichier PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $worksheet->set_column('A:A', 20);
    $worksheet->set_column('B:B', 45);
    $worksheet->set_column('C:C', 15);
    $worksheet->set_column('D:D', 40);
    ...
    $worksheet->write('A'.$ligne_courante, $rowType["type"]);
    ...
    $worksheet->write('B'.$ligne_courante, $row["nom"]);
    $worksheet->write('C'.$ligne_courante, $row["evaluation"]);
    $worksheet->write('D'.$ligne_courante, $row["strategie"]);
    où $rowType["type"] est une donnée de la BDD de type varchar, pareil pour $row["nom"], $row["evaluation"] est de type int et $row["strategie"] est de type varchar.

    J'ai vu sur un forum que les erreurs étaient déclenchées à cause du typage des données, mais la fonction write() n'est-elle pas sensée rediriger vers la bonne fonction write_xxx() qui est adaptée au type ?

    Et pourquoi set_column déclenche-t-il un avertissement ? Je l'appelle comme dans la doc il me semble..

    Je suis perdue

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bonjour, est-ce que est bien un string ?

  3. #3
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Par défaut
    ah non c'est un entier c'est vrai que j'avais pas pensé à celui-là ! Je vais essayer..

  4. #4
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Par défaut
    Toujours les mêmes erreurs avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $worksheet->set_column('A:A', 20);
    $worksheet->set_column('B:B', 45);
    $worksheet->set_column('C:C', 15);
    $worksheet->set_column('D:D', 40);
    ...
    $worksheet->write('A'.strval($ligne_courante), $rowType["type"]);
    ...
    $worksheet->write('B'.strval($ligne_courante), $row["nom"]);
    $worksheet->write('C'.strval($ligne_courante), $row["evaluation"]);
    $worksheet->write('D'.strval($ligne_courante), $row["strategie"]);
    La ligne 1209 du fichier class.writeexcel_worksheet.inc.php contient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xf      = $this->_XF($row, $col, $_[3]); # The cell format
    $_[3] correspond au format de la cellule et on dirait que c'est ça qui déclenche l'avertissement.
    Pareil pour les lignes 435 et 436
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $width  = $_[4] ? 0 : $_[2]; # Set width to zero if column is hidden
    $format = $_[3];
    on dirait que si je ne passe pas le format et le paramètre "hidden" à la fonction set_column(), ça me déclenche un avertissement.


  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    pouvez-vous essayez ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $worksheet->write(0,$ligne_courante, $rowType["type"]);
    ...
    $worksheet->write(1,ligne_courante, $row["nom"]);
    $worksheet->write(2,$ligne_courante, $row["evaluation"]);
    $worksheet->write(3,$ligne_courante, $row["strategie"]);

  6. #6
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Par défaut
    C'est pareil, toujours les mêmes erreurs.

  7. #7
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    je peux avoir le script complet ?

  8. #8
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Par défaut
    le voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    $fname = tempnam("/tmp", "testExcel.xls");
    $workbook =& new writeexcel_workbook($fname);
    $worksheet =& $workbook->addworksheet('feuille1');
    $worksheet2 =& $workbook->addworksheet('feuille2');
     
    $worksheet->freeze_panes(1, 0); 
    $worksheet2->freeze_panes(2, 0); 			
     
    $format_ligne_paire =& $workbook->addformat(array(
                                                'italic'  => 0,
                                                'color'   => 'black',
                                                'size'    => 10,
                                                'bg_color' => 47,                                       
                                            ));
    $format_ligne_paire_bord =& $workbook->addformat(array(
    										    'italic' => 0,
    										    'color'   => 'black',
    										    'size'    => 10,
    										    'left' => 1,
    										    'right' => 1,
    										    'bg_color' => 47,                                       
    										));
    $format_ligne_impaire =& $workbook->addformat(array(
                                                'italic'  => 0,
                                                'color'   => 'black',
                                                'size'    => 10,                                         
                                                'bg_color' => 1,                                             
                                            )); 
    $format_ligne_impaire_bord =& $workbook->addformat(array(
                                                'italic'  => 0,
                                                'color'   => 'black',
                                                'size'    => 10,    
                                                'left' => 1,
        										'right' => 1,                                     
                                                'bg_color' => 1,                                             
                                            ));                                         
    $format_entete =& $workbook->addformat(array(
    											'bold' 	=> 1,
                                                'italic' => 0,
                                                'color'   => 'black',
                                                'size'    => 11,                                            
                                            ));                                         
     
    $format_ligne_paire->set_text_wrap();
    $format_ligne_impaire->set_text_wrap();
    $format_ligne_paire->set_align('top');
    $format_ligne_impaire->set_align('top');
     
    $border1 =& $workbook->addformat();
    $border1->set_color('white');
    $border1->set_bold();
    $border1->set_size(10);
    $border1->set_pattern(0x1);
    $border1->set_fg_color('orange');
    $border1->set_align('center');
    $border1->set_align('vcenter');
    $border1->set_merge(); # This is the key feature
     
    $border2 =& $workbook->addformat();
    $border2->set_color('white');
    $border2->set_bold();
    $border2->set_size(10);
    $border2->set_pattern(0x1);
    $border2->set_fg_color('orange');
    $border2->set_align('center');
    $border2->set_align('vcenter');
    $border2->set_merge(); # This is the key feature
     
    $mysql_link = connectDb();
     
    /****** ONGLET 1 - offres *******/
     
    $worksheet->set_column('A:A', 20);
    $worksheet->set_column('B:B', 45);
    $worksheet->set_column('C:C', 15);
    $worksheet->set_column('D:D', 40);
     
    $worksheet->write('A1', "Type",$border1);
    $worksheet->write('B1', "Offre",$border1);
    $worksheet->write('C1', "Pondération",$border1);
    $worksheet->write('D1', "Commentaire",$border1);
     
    $ligne_courante = 2;
     
    $query = "SELECT * from offres WHERE evaluation <> 0 
    		AND id_type <> ".$_SESSION["GESTION"]["ID"]."
    		AND id_type <> ".$_SESSION["CONT"]["ID"]."
    		order by id_type_offre_elementaire,nom";
    $mysql_result = execQuery($query, $mysql_link);
    $oldType = "";
    while ($row = mysql_fetch_array($mysql_result)) 
    {		
    	$type_oe = $row['id_type'];
    	if ($oldType != $type_oe)
    	{
    		$queryType = "SELECT type from types_offres WHERE id_type_offre_elementaire = $type_oe";
    		$mysql_resultType = execQuery($queryType, $mysql_link);
    		$rowType = mysql_fetch_array($mysql_resultType);
    		$oldType = $type_oe;
    		$worksheet->write(0 , $ligne_courante, $rowType["type"]);	
    		$ligne_courante++;
    	}
     
    	$worksheet->write(1, $ligne_courante, $row["nom"]);
    	$worksheet->write(2, $ligne_courante, $row["evaluation"]);
    	$worksheet->write(3, $ligne_courante, $row["strategie"]);
    	$ligne_courante++;
    }

  9. #9
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Par défaut
    bon alors je viens d'essayer de lancer le fichier "example-textwrap.php" qu'il y a dans le package php_writeexcel-0.3.0.tar.gz et oh surprise, j'ai aussi plein d'erreurs du même genre , comment ça se fait ?? Est-ce que ce ne serait pas un problème de configuration apache, php.ini ...?

  10. #10
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    et si tu essaye un simple fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    require_once 'Spreadsheet/Excel/Writer.php';
     
    $workbook = new Spreadsheet_Excel_Writer();
    $workbook->setTempDir('./tempdoc');
    $workbook->send('base.xls');
    $worksheet = $workbook->addWorksheet();
     
    $worksheet->write(1,2,'toto');
     
     
    $workbook->close();
    $workbook->sendFile();

  11. #11
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Par défaut
    votre exemple adapté à php_writeexcel donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    require_once 'class.writeexcel_workbook.inc.php';
    require_once 'class.writeexcel_worksheet.inc.php';
     
    $fname = tempnam('/tmp', 'testExcel.xls');
    $workbook =& new writeexcel_workbook($fname);
    $worksheet =& $workbook->addworksheet();
     
    $worksheet->write(1,2,'toto');
     
    $workbook->close();
     
    header("Content-Type: application/x-msexcel; name=\"testExcel.xls\"");
    header("Content-Disposition: inline; filename=\"testExcel.xls\"");
    $fh=fopen($fname, "rb");
    fpassthru($fh);
    unlink($fname);
    le résultat est en pièce jointe..

  12. #12
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Par défaut
    bon j'abandonne php_writeexcel, c'est nul !!
    je passe à Spreadsheet_Excel_Writer, merci quand même MaitrePylos

  13. #13
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Si tu veux vraiment une librairie super puissante pour Excel, je te conseil PHPExcel (oui je sais , je fait de la pub)

  14. #14
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Par défaut
    oui j'ai vu qu'il y avait PHPExcel qui était pas mal, sauf qu'il faut l'extension zip d'activée, ce qui n'est pas le cas là où je dois mettre mon appli

  15. #15
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Sorry

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Notice: Undefined offset
    Par gaetanc15 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 30/04/2009, 16h16
  2. erreur: "Notice: Undefined offset:"
    Par Sh1v3r dans le forum Langage
    Réponses: 2
    Dernier message: 17/06/2006, 22h48
  3. [Tableaux] Array et Undefined offset
    Par richton95 dans le forum Langage
    Réponses: 10
    Dernier message: 15/03/2006, 22h47
  4. erreur Undefined offset
    Par wbagg2 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 01/12/2005, 14h16
  5. Erreur de "Undefined offset"
    Par guy2004 dans le forum Langage
    Réponses: 8
    Dernier message: 16/10/2005, 12h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo