1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2004
    Messages
    3 541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2004
    Messages : 3 541
    Points : 1 275
    Points
    1 275

    Par défaut [PHPEXCEL] Fichier quasi vide si généré avec Google Chrome, normal avec Firefox

    Bonjour,

    J'ai un fichier Excel généré avec Firefox qui se génère parfaitement, mais avec Google Chrome, je n'ai droit qu'aux headers :

    Nom : Capture d’écran 2017-05-14 à 18.35.01.png
Affichages : 36
Taille : 155,3 Ko

    Par contre, avec Firefox, j'ai toutes les informations.

    Est-ce que cela est déjà arrivé à quelqu'un ? si oui, l'avez-vous résolu ?

    Voici le code de mon fichier PHP :

    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
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    <?php
        //Code pour les nouvelles demandes d'agréments
     
    	//echo $_POST['sql'] . '\n\n\n';
     
        //IMPORTANT :  Il ne faut PAS inclure la connexion mais la mettre comme ci-dessous car bug connu avec PHPEXCEL (fichier gÈnÈrÈ via le navigateur inexploitable !!!!)
        try
        {
            $bdd = new PDO('mysql:host=127.0.0.1;dbname=qque', 'qqe', 'prive', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
     
        }
        catch (PDOException $e)
        {
            print "Erreur !: " . $e->getMessage() . "<br/>";
            die();
        }
     
        if (!isset($_SESSION))
        {
            session_start();
        }
     
        include 'PHPExcel.php';
        include 'PHPExcel/Writer/Excel2007.php';
        $objPHPExcel = new PHPExcel();
        $objPHPExcel->setActiveSheetIndex(0)->setTitle('Résultat filtre');
     
     
       $pharmaciens = $bdd->prepare($_POST['sql']);
       $pharmaciens->execute();
     
       $res = $pharmaciens->fetchAll(PDO::FETCH_OBJ);
     
    			//print_r($res);
     
       $i = 2;
       $temp_nombre_jours = 0;
       $objPHPExcel->getActiveSheet()->SetCellValue('A1', 'NOM');
       $objPHPExcel->getActiveSheet()->SetCellValue('B1', 'PRENOM');
       $objPHPExcel->getActiveSheet()->SetCellValue('C1', 'ADRESSE');
       $objPHPExcel->getActiveSheet()->SetCellValue('D1', 'CODE POSTAL');
       $objPHPExcel->getActiveSheet()->SetCellValue('E1', 'LOCALITE');
       $objPHPExcel->getActiveSheet()->SetCellValue('F1', 'PAYS');
       //$objPHPExcel->getActiveSheet()->SetCellValue('E1', 'ANNEE DEBUT AGREMENT');
       $objPHPExcel->getActiveSheet()->SetCellValue('G1', 'TELEPHONE');
       $objPHPExcel->getActiveSheet()->SetCellValue('H1', 'MAIL');
       $objPHPExcel->getActiveSheet()->SetCellValue('I1', 'DEBUT AGREMENT');
     
       //redimensionnement des colonnes afin d'avoir des colonnes en autosize
       for($col = 'A'; $col !== 'L'; $col++)
       {
            $objPHPExcel->getActiveSheet()
            ->getColumnDimension($col)
            ->setAutoSize(true);
        }
     
    				foreach($res as $donnees)
    				{
    								$styleArray = array('font' => array('bold' => true));
     
    								//je mets en gras le contenu de ces cellules
    								$objPHPExcel->getActiveSheet()->getStyle('A1')->applyFromArray($styleArray);
    								$objPHPExcel->getActiveSheet()->getStyle('B1')->applyFromArray($styleArray);
    								$objPHPExcel->getActiveSheet()->getStyle('C1')->applyFromArray($styleArray);
    								$objPHPExcel->getActiveSheet()->getStyle('D1')->applyFromArray($styleArray);
    								$objPHPExcel->getActiveSheet()->getStyle('E1')->applyFromArray($styleArray);
     
    								$objPHPExcel->getActiveSheet()->getStyle('F1')->applyFromArray($styleArray);
     
    								$objPHPExcel->getActiveSheet()->getStyle('G1')->applyFromArray($styleArray);
    								$objPHPExcel->getActiveSheet()->getStyle('H1')->applyFromArray($styleArray);
    								$objPHPExcel->getActiveSheet()->getStyle('I1')->applyFromArray($styleArray);
    								$objPHPExcel->getActiveSheet()->getStyle('J1')->applyFromArray($styleArray);
    								$objPHPExcel->getActiveSheet()->getStyle('K1')->applyFromArray($styleArray);
     
    								$objPHPExcel->getActiveSheet()->SetCellValue('A'.$i, $donnees->nom);
    								$objPHPExcel->getActiveSheet()->SetCellValue('B'.$i, $donnees->prenom);
    								$objPHPExcel->getActiveSheet()->SetCellValue('C'.$i, $donnees->adresse);
     
    								//pays
    								if(strtolower($donnees->pays) == "belgique")
    								{
    												$objPHPExcel->getActiveSheet()->SetCellValue('D'.$i, $donnees->code_postal_be);
    												$objPHPExcel->getActiveSheet()->SetCellValue('E'.$i, $donnees->libelle_be);
    												$objPHPExcel->getActiveSheet()->SetCellValue('F'.$i, "BELGIQUE");    
    								}
    								elseif(strtolower($donnees->pays) == "france")
    								{
    												$objPHPExcel->getActiveSheet()->SetCellValue('D'.$i, $donnees->code_postal_fr);
    												$objPHPExcel->getActiveSheet()->SetCellValue('E'.$i, $donnees->libelle_fr);
    												$objPHPExcel->getActiveSheet()->SetCellValue('F'.$i, "FRANCE");    
    								}
    								else
    								{
    												$objPHPExcel->getActiveSheet()->SetCellValue('D'.$i, $donnees->code_postal_lux);
    												$objPHPExcel->getActiveSheet()->SetCellValue('E'.$i, $donnees->libelle_lux);
    												$objPHPExcel->getActiveSheet()->SetCellValue('F'.$i, "LUXEMBOURG");    
    								}
     
     
    								 //$objPHPExcel->getActiveSheet()->SetCellValue('E'.$i, $donnees->SUBSTR(date_debut, 1, 4));
    									$objPHPExcel->getActiveSheet()->SetCellValueExplicit('G'.$i, $donnees->telephone, PHPExcel_Cell_DataType::TYPE_STRING);
    									$objPHPExcel->getActiveSheet()->SetCellValue('H'.$i, $donnees->mail);
    									$objPHPExcel->getActiveSheet()->SetCellValue('I'.$i, $donnees->date_debut);
     
     
    									$i = $i+1;
       }//fin du foreach
     
    				try
        {
            $writer = new PHPExcel_Writer_Excel2007($objPHPExcel);
     
     
    								$writer->save(str_replace('.php', '.xlsx', __FILE__));
     
    								echo 'Exportation OK, veuillez cliquer <a href="http://stageoff.ulb.ac.be/classes/Excel/Classes/filtre_generation_excel.xlsx"><img src="../../../images/excel.jpg" /></a> pour sauvegarder le document';
        }
        catch (PDOException $e)
        {
            print "Erreur !: " . $e->getMessage() . "<br/>";
            die();
        }
     
     
    ?>
    Merci d'avance pour l'aide.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    juillet 2005
    Messages
    27 916
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 27 916
    Points : 41 519
    Points
    41 519

    Par défaut

    Tu as débugué un peu ?

    Est-ce que $res contient la même chose dans les deux cas ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2004
    Messages
    3 541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2004
    Messages : 3 541
    Points : 1 275
    Points
    1 275

    Par défaut

    Merci pour ta réponse rapide.

    Je confirme que $res est identique pour Google Chrome et Firefox.

    bee

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    juillet 2005
    Messages
    27 916
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 27 916
    Points : 41 519
    Points
    41 519

    Par défaut

    Et si tu mets un
    tu obtiens la même progression dans les deux cas ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2004
    Messages
    3 541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2004
    Messages : 3 541
    Points : 1 275
    Points
    1 275

    Par défaut

    Identiquement la même chose :

    Chrome :
    3456789101112131415
    Firefox :
    3456789101112131415
    Est-ce que ça pourrait être un problème d'en-tête ou de type MIME ?

    Le pire, c'est que parfois ça fonctionne, parfois ça ne fonctionne pas.

    Je ne comprends plus rien...

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    juillet 2005
    Messages
    27 916
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 27 916
    Points : 41 519
    Points
    41 519

    Par défaut

    Tu ouvres le fichier directement depuis son emplacement ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2004
    Messages
    3 541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2004
    Messages : 3 541
    Points : 1 275
    Points
    1 275

    Par défaut

    Depuis le dossier téléchargements de mon ordinateur...

    Et comme tu peux le voir, je l'ai téléchargé une dizaine de fois, seul une fois toutes les données apparaissent (8 ko) les 7 ko je n'ai que les entêtes :

    Nom : Capture d’écran 2017-05-14 à 20.25.41.png
Affichages : 19
Taille : 153,5 Ko

  8. #8
    Membre averti Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    juin 2011
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : juin 2011
    Messages : 198
    Points : 381
    Points
    381

    Par défaut

    Salut,
    voici le code que j'utilise pour la génération de mes fichiers, je ne sais pas si ça va changer grande chose chez toi

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //Code ici non montré
    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 
    header('Content-Disposition: attachment;filename="fichier.xlsx"'); 
    header('Cache-Control: max-age=0'); 
    $writer = PHPExcel_IOFactory::createWriter($classeur, 'Excel2007'); 
    $writer->save('php://output');

    Ici $classeur représente mon objet PhpExcel
    Le bienfait n'est jamais perdu

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    juillet 2005
    Messages
    27 916
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 27 916
    Points : 41 519
    Points
    41 519

    Par défaut

    Regarde plutôt directement sur le serveur comment est le fichier.
    Quand tu le télécharges, tu peux avoir un problème de cache par exemple.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Responsable Livres

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    4 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 4 471
    Points : 10 184
    Points
    10 184

    Par défaut

    Salut,
    J'ai déjà eu ce souci et je l'ai réglé en travaillant sur du xls et non pas xlsx , essaye donc avec Excel5 pour voir si tu as toujours des soucis.

  11. #11
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2004
    Messages
    3 541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2004
    Messages : 3 541
    Points : 1 275
    Points
    1 275

    Par défaut

    Bonjour,

    Merci à tous pour vos réponses.

    @sabotage : les fichiers excel ne semblent pas être hébergés sur le serveur.

    @Maître : J'ai essayé ce que tu me dis (j'avais en effet déjà rencontré ce problème) mais rien n'y fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    include 'PHPExcel.php';
        include 'PHPExcel/Writer/Excel5';
    ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    try
        {
            $writer = new PHPExcel_Writer_Excel5($objPHPExcel);
     
     
    								$writer->save(str_replace('.php', '.xls', __FILE__));
     
    								echo 'Exportation OK, veuillez cliquer <a href="http://stageoff.ulb.ac.be/classes/Excel/Classes/filtre_generation_excel.xls"><img src="../../../images/excel.jpg" /></a> pour sauvegarder le document';
        }
        catch (PDOException $e)
        {
            print "Erreur !: " . $e->getMessage() . "<br/>";
            die();
        }
    Je m'y prends peut-être mal ?

    Encore merci pour l'aide.

    bee

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    juillet 2005
    Messages
    27 916
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 27 916
    Points : 41 519
    Points
    41 519

    Par défaut

    les fichiers excel ne semblent pas être hébergés sur le serveur.
    Tu fais bien un "save" non ?
    et Excel/Classes/filtre_generation_excel.xls c'est bien un lien vers le serveur non ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Responsable Livres

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    4 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 4 471
    Points : 10 184
    Points
    10 184

    Par défaut

    Salut,

    Déjà tu peux sortir cette partie de la boucle

    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
     
    //je mets en gras le contenu de ces cellules
    $objPHPExcel->getActiveSheet()->getStyle('A1')->applyFromArray($styleArray);
    $objPHPExcel->getActiveSheet()->getStyle('B1')->applyFromArray($styleArray);
    $objPHPExcel->getActiveSheet()->getStyle('C1')->applyFromArray($styleArray);
    $objPHPExcel->getActiveSheet()->getStyle('D1')->applyFromArray($styleArray);
    $objPHPExcel->getActiveSheet()->getStyle('E1')->applyFromArray($styleArray);
     
    $objPHPExcel->getActiveSheet()->getStyle('F1')->applyFromArray($styleArray);
     
    $objPHPExcel->getActiveSheet()->getStyle('G1')->applyFromArray($styleArray);
    $objPHPExcel->getActiveSheet()->getStyle('H1')->applyFromArray($styleArray);
    $objPHPExcel->getActiveSheet()->getStyle('I1')->applyFromArray($styleArray);
    $objPHPExcel->getActiveSheet()->getStyle('J1')->applyFromArray($styleArray);
    $objPHPExcel->getActiveSheet()->getStyle('K1')->applyFromArray($styleArray);

    Ensuite tu as accès au log apache, car chez moi il y a une erreur de break.
    Faudrait donc voir si tu n'as pas d'erreur, car ton try ne retourne que les erreurs PDO

  14. #14
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2004
    Messages
    3 541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2004
    Messages : 3 541
    Points : 1 275
    Points
    1 275

    Par défaut

    Citation Envoyé par sabotage Voir le message
    Regarde plutôt directement sur le serveur comment est le fichier.
    Quand tu le télécharges, tu peux avoir un problème de cache par exemple.
    Je te confirme que sur le serveur, quand c'est généré avec Chrome, j'ai un fichier incomplet :

    Nom : Capture d'écran 2017-05-16 18.41.44.png
Affichages : 15
Taille : 16,1 Ko

    et avec Firefox :

    Nom : Capture d'écran 2017-05-16 18.42.42.png
Affichages : 17
Taille : 16,2 Ko

    On voit directement la différence de taille.

    Donc, oui, le fichier est enregistré sur le serveur.

    Merci pour l'aide.

  15. #15
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2004
    Messages
    3 541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2004
    Messages : 3 541
    Points : 1 275
    Points
    1 275

    Par défaut

    Citation Envoyé par MaitrePylos Voir le message
    Salut,

    Déjà tu peux sortir cette partie de la boucle

    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
     
    //je mets en gras le contenu de ces cellules
    $objPHPExcel->getActiveSheet()->getStyle('A1')->applyFromArray($styleArray);
    $objPHPExcel->getActiveSheet()->getStyle('B1')->applyFromArray($styleArray);
    $objPHPExcel->getActiveSheet()->getStyle('C1')->applyFromArray($styleArray);
    $objPHPExcel->getActiveSheet()->getStyle('D1')->applyFromArray($styleArray);
    $objPHPExcel->getActiveSheet()->getStyle('E1')->applyFromArray($styleArray);
     
    $objPHPExcel->getActiveSheet()->getStyle('F1')->applyFromArray($styleArray);
     
    $objPHPExcel->getActiveSheet()->getStyle('G1')->applyFromArray($styleArray);
    $objPHPExcel->getActiveSheet()->getStyle('H1')->applyFromArray($styleArray);
    $objPHPExcel->getActiveSheet()->getStyle('I1')->applyFromArray($styleArray);
    $objPHPExcel->getActiveSheet()->getStyle('J1')->applyFromArray($styleArray);
    $objPHPExcel->getActiveSheet()->getStyle('K1')->applyFromArray($styleArray);

    Ensuite tu as accès au log apache, car chez moi il y a une erreur de break.
    Faudrait donc voir si tu n'as pas d'erreur, car ton try ne retourne que les erreurs PDO
    OK, j'ai retiré le code de la boucle, merci pour l'info.

    Après, je n'ai pas accès au log apache, juste aux logs error, mais je ne vois rien de spécial, le log s'arrête en mars 2016 (peut-être full).

    J'ai un autre code qui fonctionne parfaitement sous Google Chrome (ici, le sql n'est pas dans une variable POST, ça serait ça le problème ????)

    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
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
     
    <?php
     
        //IMPORTANT :  Il ne faut PAS inclure la connexion mais la mettre comme ci-dessous car bug connu avec PHPEXCEL (fichier gÈnÈrÈ via le navigateur inexploitable !!!!)
        try
        {
            $bdd = new PDO('mysql:host=127.0.0.1;dbname=qqe', 'qqe', 'mdp', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
        }
        catch (PDOException $e)
        {
            print "Erreur !: " . $e->getMessage() . "<br/>";
            die();
        }
     
        if (!isset($_SESSION))
        {
            session_start();
        }
     
        $sql = "SELECT stage.id as s_id,stage.ref_identification, stage.ref_etudiant as s_etudiant, stage.date_debut,
                stage.date_fin, stage.numero_certificat as s_nc, pharmacien.nom as p_nom,
                pharmacien.prenom as p_prenom, pharmacien.adresse,etudiant.nom as e_nom,
                etudiant.prenom as e_prenom, etudiant.compte_actif, etudiant.annee as e_annee,
                date_debut_stage_comp as debut_sc, date_fin_stage_comp as fin_sc, type_stage_comp as type_sc	";
       $sql.= "FROM stage ";
       $sql.= "LEFT JOIN pharmacien ON pharmacien.ref_identification = stage.ref_identification ";
       $sql.= "LEFT JOIN etudiant ON etudiant.matricule = stage.ref_etudiant ";
       $sql.= "WHERE etudiant.compte_actif = 1 ";
       //je n'affiche QUE les étudiants de MA2
       $sql.= "AND etudiant.annee LIKE '%PHAR5S-%' ";
       $sql.= "ORDER BY etudiant.nom";
       //echo $sql;
       $pharmaciens = $bdd->prepare($sql);
       $pharmaciens->execute();
     
       $res = $pharmaciens->fetchAll(PDO::FETCH_OBJ);
     
     
     
        include 'PHPExcel.php';
        include 'PHPExcel/Writer/Excel2007.php';
     
        $objPHPExcel = new PHPExcel();
     
     
       // Add some data
       //echo date('H:i:s') . " Add some data\n";
       $objPHPExcel->setActiveSheetIndex(0);
     
       $i = 2;
       $temp_nombre_jours = 0;
       $objPHPExcel->getActiveSheet()->SetCellValue('A1', 'NOM ETUDIANT');
       $objPHPExcel->getActiveSheet()->SetCellValue('B1', 'PRENOM ETUDIANT');
       $objPHPExcel->getActiveSheet()->SetCellValue('C1', 'NOM MDS');
       $objPHPExcel->getActiveSheet()->SetCellValue('D1', 'PRENOM MDS');
       $objPHPExcel->getActiveSheet()->SetCellValue('E1', 'ANNEE ETUDIANT');
       $objPHPExcel->getActiveSheet()->SetCellValue('F1', 'DATE DEBUT STAGE');
       $objPHPExcel->getActiveSheet()->SetCellValue('G1', 'DATE FIN STAGE');
       $objPHPExcel->getActiveSheet()->SetCellValue('H1', 'JOURS PAR PERIODE');
       $objPHPExcel->getActiveSheet()->SetCellValue('I1', 'TOTAL JOURS');
       $objPHPExcel->getActiveSheet()->SetCellValue('K1', 'DATE DEBUT STAGE COMPLEMENTAIRE');
       $objPHPExcel->getActiveSheet()->SetCellValue('L1', 'DATE FIN STAGE COMPLEMENTAIRE');
       $objPHPExcel->getActiveSheet()->SetCellValue('M1', 'TYPE DE STAGE COMPLEMENTAIRE');
       $objPHPExcel->getActiveSheet()->SetCellValue('N1', 'NOMBRE DE JOURS PRESTES STAGE COMPLEMENTAIRE');
       $objPHPExcel->getActiveSheet()->SetCellValue('O1', 'NOMBRE DE JOURS A PRESTER STAGE COMPLEMENTAIRE');
       $objPHPExcel->getActiveSheet()->SetCellValue('P1', 'DIFFERENCE STAGE COMPLEMENTAIRE');
     
       foreach($res as $donnees)
       {
        //j'affiche le totaux du nombre d'heure par étudiant.
        //je vérifie que le matricule en cours est différent du temporaire (celui que l'on vient de traiter)
        if($donnees->s_etudiant != $temp_matricule)
        {
            if($i > 1)
            {
                //si c'est le cas, je remonte d'une cellule et je mets le total
                $objPHPExcel->getActiveSheet()->SetCellValue('I'.($i-1), $temp_nombre_jours);
                if($temp_nombre_jours < 179 || $temp_nombre_jours > 195 )
                {
                    $objPHPExcel->getActiveSheet()->getStyle('I'.($i-1))->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
                    $objPHPExcel->getActiveSheet()->SetCellValue('J'.($i-1), 'ATTENTION PROBLEME ICI !!!!');
                    $objPHPExcel->getActiveSheet()->getStyle('J'.($i-1))->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
     
                }
                else
                {
                    $objPHPExcel->getActiveSheet()->getStyle('I'.($i-1))->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE);    
                }
     
     
                //je remets le total temporaire à 0
                $temp_nombre_jours = 0;
            }
        }
     
         $styleArray = array(
         'font' => array(
         'bold' => true
       )
       );
     
         //je mets en gras le contenu de ces cellules
        $objPHPExcel->getActiveSheet()->getStyle('A1')->applyFromArray($styleArray);
        $objPHPExcel->getActiveSheet()->getStyle('B1')->applyFromArray($styleArray);
        $objPHPExcel->getActiveSheet()->getStyle('C1')->applyFromArray($styleArray);
        $objPHPExcel->getActiveSheet()->getStyle('D1')->applyFromArray($styleArray);
        $objPHPExcel->getActiveSheet()->getStyle('E1')->applyFromArray($styleArray);
        $objPHPExcel->getActiveSheet()->getStyle('F1')->applyFromArray($styleArray);
        $objPHPExcel->getActiveSheet()->getStyle('G1')->applyFromArray($styleArray);
        $objPHPExcel->getActiveSheet()->getStyle('H1')->applyFromArray($styleArray);
        $objPHPExcel->getActiveSheet()->getStyle('I1')->applyFromArray($styleArray);
        $objPHPExcel->getActiveSheet()->getStyle('K1')->applyFromArray($styleArray);
        $objPHPExcel->getActiveSheet()->getStyle('L1')->applyFromArray($styleArray);
        $objPHPExcel->getActiveSheet()->getStyle('M1')->applyFromArray($styleArray);
        $objPHPExcel->getActiveSheet()->getStyle('N1')->applyFromArray($styleArray);
        $objPHPExcel->getActiveSheet()->getStyle('O1')->applyFromArray($styleArray);
        $objPHPExcel->getActiveSheet()->getStyle('P1')->applyFromArray($styleArray);
        $objPHPExcel->getActiveSheet()->getStyle('Q1')->applyFromArray($styleArray);
        $objPHPExcel->getActiveSheet()->getStyle('R1')->applyFromArray($styleArray);
     
         if($donnees->e_nom != $temp_nom)
         {
     
            $objPHPExcel->getActiveSheet()->SetCellValue('A'.$i, $donnees->e_nom);
            $objPHPExcel->getActiveSheet()->SetCellValue('B'.$i, $donnees->e_prenom);
            $objPHPExcel->getActiveSheet()->SetCellValue('E'.$i, $donnees->e_annee);
            //je compte le temps passé au stage complémentaire ici pour que cela ne se répête pas à chaque ligne excel
            $objPHPExcel->getActiveSheet()->SetCellValue('K'.$i, $donnees->debut_sc);
            $objPHPExcel->getActiveSheet()->SetCellValue('L'.$i, $donnees->fin_sc);
            $nombre_jours = nbJours($donnees->debut_sc, $donnees->fin_sc);
            $nombre_jours = intval($nombre_jours);
     
            $objPHPExcel->getActiveSheet()->SetCellValue('N'.$i, $nombre_jours);
     
            switch($donnees->type_sc)
            {
               case 1:
                   $objPHPExcel->getActiveSheet()->SetCellValue('M'.$i, "Stage complémentaire");
                   $objPHPExcel->getActiveSheet()->SetCellValue('O'.$i, "45 jours");
     
                   $nbJours_sc = intval($nbJours_sc);
                   //différence entre le nombre jours prestés et le nombre de jours à prester
                   $difference = ($nombre_jours - 45);
     
                   $difference = intval($difference);
                   //echo 'nbJours => '.$nbJours . ' difference => '.$difference;
                   $objPHPExcel->getActiveSheet()->SetCellValue('P'.$i, "45 jours");
                   $objPHPExcel->getActiveSheet()->SetCellValue('P'.$i, $difference);
                   if($difference < 0)
                   {
                        $objPHPExcel->getActiveSheet()->getStyle('P'.$i)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
                        $objPHPExcel->getActiveSheet()->getStyle('P'.$i)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
                        $objPHPExcel->getActiveSheet()->SetCellValue('Q'.$i, 'ATTENTION PROBLEME ICI !!!!');
                        $objPHPExcel->getActiveSheet()->getStyle('Q'.$i)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
                   }
                   else
                   {
                        $objPHPExcel->getActiveSheet()->getStyle('P'.$i)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE);
                   }
               break;
               case 2:
                   $objPHPExcel->getActiveSheet()->SetCellValue('M'.$i, "Stage ERASMUS");
                   $objPHPExcel->getActiveSheet()->SetCellValue('O'.$i, "180 jours");
                   $nbJours_sc = intval($nbJours_sc);
                   //différence entre le nombre jours prestés et le nombre de jours à prester
                   $difference = ($nombre_jours - 180);
                   $difference = intval($difference);
                   //echo 'nbJours => '.$nbJours . ' difference => '.$difference;
                   $objPHPExcel->getActiveSheet()->SetCellValue('P'.$i, $difference);
                   if($difference < 0)
                   {
                        $objPHPExcel->getActiveSheet()->getStyle('P'.$i)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
                        $objPHPExcel->getActiveSheet()->getStyle('P'.$i)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
                        $objPHPExcel->getActiveSheet()->SetCellValue('Q'.$i, 'ATTENTION PROBLEME ICI !!!!');
                        $objPHPExcel->getActiveSheet()->getStyle('Q'.$i)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
                   }
                   else
                   {
                        $objPHPExcel->getActiveSheet()->getStyle('P'.$i)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE);
     
                   }
               break;
               case 3:
                   $objPHPExcel->getActiveSheet()->SetCellValue('M'.$i, "Stage de recherche");
                   $objPHPExcel->getActiveSheet()->SetCellValue('O'.$i, "180 jours");
                   //différence entre le nombre jours prestés et le nombre de jours à prester
                   $difference = ($nombre_jours - 180);
                   $nbJours_sc = intval($nbJours_sc);
                   $difference = intval($difference);
                   //echo 'nbJours => '.$nbJours . '<br /> difference => '.$difference.' <br />';
                   $objPHPExcel->getActiveSheet()->SetCellValue('P'.$i, $difference);
                   if($difference < 0)
                   {
                        $objPHPExcel->getActiveSheet()->getStyle('P'.$i)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
                        $objPHPExcel->getActiveSheet()->SetCellValue('Q'.$i, 'ATTENTION PROBLEME ICI !!!!');
                        $objPHPExcel->getActiveSheet()->getStyle('Q'.$i)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
                        $objPHPExcel->getActiveSheet()->getStyle('Q'.$i)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
                   }
                   else
                   {
                        $objPHPExcel->getActiveSheet()->getStyle('P'.$i)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE);
                   }
     
               break;
            }
         }
     
         if($donnees->p_nom != $temp_mds)
         {
            $objPHPExcel->getActiveSheet()->SetCellValue('C'.$i, $donnees->p_nom);
            $objPHPExcel->getActiveSheet()->SetCellValue('D'.$i, $donnees->p_prenom);  
         }
     
         $objPHPExcel->getActiveSheet()->SetCellValue('F'.$i, $donnees->date_debut);
         $objPHPExcel->getActiveSheet()->SetCellValue('G'.$i, $donnees->date_fin);
     
     
     
     
     
     
     
         /*Comptage du nombre de jours prestés par l'étudiant DD 03 juin 2014*/
     
         // On transforme les 2 dates en timestamp
         $date1 = strtotime($donnees->date_debut);
         $date2 = strtotime($donnees->date_fin);
     
        // On récupère la différence de timestamp entre les 2 précédents
         $nbJoursTimestamp = $date2 - $date1;
     
        // ** Pour convertir le timestamp (exprimé en secondes) en jours **
        // On sait que 1 heure = 60 secondes * 60 minutes et que 1 jour = 24 heures donc :
        $nbJours = $nbJoursTimestamp/86400; // 86 400 = 60*60*24
        $nbJours = intval($nbJours); 
        $objPHPExcel->getActiveSheet()->SetCellValue('H'.$i, $nbJours);
     
        $temp_matricule = $donnees->s_etudiant;
        $temp_nom = $donnees->e_nom;
        $temp_mds = $donnees->p_nom;
        $temp_nombre_jours += $nbJours;
     
         $i = $i+1;
       }
     
       //redimensionnement des colonnes afin d'avoir des colonnes en autosize
       for($col = 'A'; $col !== 'P'; $col++)
       {
            $objPHPExcel->getActiveSheet()
            ->getColumnDimension($col)
            ->setAutoSize(true);
        }
     
        //fonction qui permet de compter le nombre de jours entre deux dates   
      function nbJours($debut, $fin)
      {
     
          //60 secondes X 60 minutes X 24 heures dans une journée
          $nbSecondes= 60*60*24;
     
          $debut_ts = strtotime($debut);
          $fin_ts = strtotime($fin);
          $diff = $fin_ts - $debut_ts;
          return round($diff / $nbSecondes);
      }
     
       $writer = new PHPExcel_Writer_Excel2007($objPHPExcel);
     
     
       $writer->save(str_replace('.php', '.xlsx', __FILE__));
     
       echo 'Exporation OK, veuillez cliquer <a href="http://stageoff.ulb.ac.be/classes/Excel/Classes/impression_xlsx_certificats_stages.xlsx"><img src="../../../images/excel.jpg" /></a> pour sauvegarder le document';
    ?>

    Encore merci pour l'aide.

  16. #16
    Responsable Livres

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    4 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 4 471
    Points : 10 184
    Points
    10 184

    Par défaut

    Le plus simple est de vérifier avec un var_dump

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    .......
     
    var_dump($_POST['sql']);
    die();
    comme ça tu vois si la requête arrive, après faire de cette façon n'est pas très sécure.

  17. #17
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2004
    Messages
    3 541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2004
    Messages : 3 541
    Points : 1 275
    Points
    1 275

    Par défaut

    Citation Envoyé par MaitrePylos Voir le message
    Le plus simple est de vérifier avec un var_dump

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    .......
     
    var_dump($_POST['sql']);
    die();
    comme ça tu vois si la requête arrive, après faire de cette façon n'est pas très sécure.
    Voici le résultat avec le print_r, testé avec phpmyadmin, la chaine sql fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ref_agrement, pharmacien.id, pharmacien.nom as nom, pharmacien.prenom, officine.adresse, pays.libelle as pays, localite_be.code_postal as code_postal_be, localite_be.nom as libelle_be, localite_fr.code_postal as code_postal_fr, localite_fr.nom as libelle_fr, localite_lux.code_postal as code_postal_lux, localite_lux.nom as libelle_lux, SUBSTR(date_debut, 1, 4) as date_debut, officine.telephone, officine.mail, identification.login, identification.id, agrement.actif, agrement.en_attente, agrement.renouvellement_soumis, agrement.id as id_agrement, province_be.nom as nomp FROM pharmacien LEFT JOIN officine ON pharmacien.ref_identification = officine.ref_identification LEFT JOIN pays ON officine.pays=pays.id LEFT JOIN agrement ON pharmacien.ref_agrement = agrement.id LEFT JOIN identification ON pharmacien.ref_identification = identification.id LEFT JOIN localite_be on officine.ref_code_postal=localite_be.id LEFT JOIN localite_fr on officine.ref_code_postal=localite_fr.id LEFT JOIN localite_lux on officine.ref_code_postal=localite_lux.id LEFT JOIN province_be on localite_be.province = province_be.ID WHERE officine.pays = 2 ORDER BY pharmacien.nom, pharmacien.prenom

  18. #18
    Responsable Livres

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    4 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 4 471
    Points : 10 184
    Points
    10 184

    Par défaut

    ok mais dans les deux cas tu as quelque chose si tu décommente ceci


Discussions similaires

  1. $_SESSION vidée avec Google Chrome
    Par johnstyle dans le forum Sessions
    Réponses: 7
    Dernier message: 04/08/2011, 04h02
  2. Problème avec Google Chrome et ma DTD
    Par riadhhwajdii dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 03/08/2009, 10h09
  3. Réponses: 2
    Dernier message: 08/05/2009, 19h57
  4. Ecriture/lecture en local d'un cookie avec Google Chrome
    Par WhoIsTiti dans le forum JavaScript
    Réponses: 2
    Dernier message: 11/03/2009, 13h49
  5. [Google Earth] Erreur avec Google Earth
    Par Furius dans le forum Autres Logiciels
    Réponses: 13
    Dernier message: 09/11/2005, 20h16

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