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

Symfony PHP Discussion :

Génération de fichier Excel sfPhpExcel = fichier endommagé [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 80
    Par défaut Génération de fichier Excel sfPhpExcel = fichier endommagé
    Bonjour à tous,

    Pour commencer mon projet est sur Symfony 1.4 et Doctrine.
    Ma version d'Excel est un peu vieille : 2003.

    J'utilise le plugin sfPhpExcel pour exporter des données de la base vers des fichiers Excel.

    Lorsque le fichier généré est quasiment vide (4 ou 5 lignes par exemple) pas de problème, le fichier se génère et je peux l'ouvrir avec Excel.

    Dès que le fichier est un peu plus conséquent (12 lignes donc pas énorme non plus !), il se génère bien mais lorsque que Excel essaye de l'ouvrir j'ai une magnifique erreur "Le fichier est endommagé et ne peut être ouvert. Pour essayer de le réparer....".
    J'ai fait testé quelqu'un qui a une version plus récente d'Excel et c'est le même message d'erreur.
    Ce qui est dingue c'est que OpenOffice me l'ouvre parfaitement !

    J'ai fait des centaines de tests, je pensais que ça pouvait venir des accents, mais ça vient bien du nombre de données envoyées, pour 10 lignes ça passe, pour 11 ça ne marche plus.
    J'enverrai 10 000 lignes je comprendrai mais là pour 11 lignes ?????

    J'ai testé l'export en version Excel5 et Excel2007 c'est pareil.
    En CSV par contre ça marche nickel.

    Après plusieurs heures dessus je sèche !!! Quelqu'un aurait-il une idée ?

    Inutile de préciser que cet export est destiné à des personnes équipées sous Microsoft Office et non Open OFFice... je dois donc absolument le faire focntionner.

    Voici le code qui génère mon excel :

    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
     
        public function executeExcel(sfWebRequest $request)
        {
            $this->setLayout(false);
            $excel = new sfPhpExcel();   
     
            $excel->setActiveSheetIndex(0);
     
            $excel->getActiveSheet()->setCellValue('A3',utf8_encode('Référence'));
            $excel->getActiveSheet()->setCellValue('B3',utf8_encode('Nom et Prénom'));
            $excel->getActiveSheet()->setCellValue('C3',utf8_encode('Département'));
            $excel->getActiveSheet()->setCellValue('D3',utf8_encode('Activité'));
            $excel->getActiveSheet()->setCellValue('E3',utf8_encode('Activité'));
            $excel->getActiveSheet()->setCellValue('F3',utf8_encode('Date'));
            $excel->getActiveSheet()->setCellValue('G3',utf8_encode('Colonne test'));
     
            $q = $this->buildQuery();
     
            $repreneurslisting = $q->execute();
            $i = 4;
     
            foreach($repreneurslisting as $rep) {
     
                $p = Doctrine_Query::create()
                      ->select('id, nom_rep, prenom_rep, departement_id')
                      ->from('EtatCivilRep r')
                      ->where('r.repreneur_id=?',$rep->getId());
                $proprio = $p->fetchOne();
     
                $r = Doctrine_Query::create()
                      ->select('id')
                      ->from('FinanceRep f')
                      ->where('f.repreneur_id=?',$rep->getId());
                $finance = $r->fetchOne();
     
                if ($proprio['departement_id']<>"") {
                  $s = Doctrine_Query::create()
                        ->select('id, nom')
                        ->from('Departement d')
                        ->where('d.id=?',$proprio['departement_id']);
                  $dep = $s->fetchOne();
                  $excel->getActiveSheet()->setCellValue('C'.$i,$dep['nom']);
                }
     
                if ($rep->getSecteurAct1Id()<>"") {
                  $t = Doctrine_Query::create()
                        ->select('id')
                        ->from('SecteurAct s')
                        ->where('s.id=?',$rep->getSecteurAct1Id());
                  $act1 = $t->fetchOne();
                  $excel->getActiveSheet()->setCellValue('D'.$i,$act1->getNom());
                }
     
                if ($rep->getSecteurAct2Id()<>"") {
                  $u = Doctrine_Query::create()
                        ->select('id')
                        ->from('SecteurAct s')
                        ->where('s.id=?',$rep->getSecteurAct2Id());
                  $act2 = $u->fetchOne();
                  $excel->getActiveSheet()->setCellValue('E'.$i,$act2->getNom());
                }
     
                $excel->getActiveSheet()->setCellValue('A'.$i,$rep->getNumRepreneur());
                $excel->getActiveSheet()->setCellValue('B'.$i,$proprio['nom_rep']." ".$proprio['prenom_rep']);
     
                $excel->getActiveSheet()->setCellValue('F'.$i,date('d/m/Y',strtotime($rep->getDatePremier())));
     
                if (isset($finance['apport_dispo'])) {
                  $excel->getActiveSheet()->setCellValue('G'.$i,$finance['test_dispo']);
                } else {
                  $excel->getActiveSheet()->setCellValue('G'.$i,0);
                }
     
                $i++;
     
            }
     
            $j = $i + 1;
     
            $excel->getActiveSheet()->setCellValue('A'.$j,'TOTAL');
     
            $excel->getActiveSheet()->setCellValue('B'.$j,$i-4);      
     
            $excel->setActiveSheetIndex(0);
     
            $objWriter = PHPExcel_IOFactory::createWriter($excel, 'Excel5');
     
            $objWriter->save(str_replace('.php', '.xls', '/xxxx/xxxxx/xxxx/excel/test_excel.php'));
     
            $this->redirect('/excel/repreneur_excel.xls');    
     
        }
    Merci d'avance !

    cli16 --

  2. #2
    Membre émérite Avatar de kenny.kev
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 646
    Par défaut
    Je te conseil de lire la doc de phpExcel tu auras plus de détails.

    De plus il en conseil aussi de mettre à jours la version de phpExcel car j'ai rencontrer des problèmes avec la version du plugin.

    Enfin vérifie que tu n'as pas un problème avec la limite de mémoire de php car si ça fonctionne pour 5 ça dois fonctionner pour 1000.

    PS : si c'est pour télécharge le fichier tu peux faire comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            $this->getResponse()->clearHttpHeaders();
            $this->setLayout(false);
            $this->getResponse()->setContentType($this->contentType);
            $this->getResponse()->setHttpHeader('Content-Disposition', 'attachment; filename=' . $filename);
            $this->getResponse()->sendHttpHeaders();
            $objWriter->save('php://output');
            return sfView::NONE;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 80
    Par défaut
    Merci beaucoup kenny.kev !

    Après avoir remplacé la version de PHPExcel dans Symfony, ça fonctionne !!!!!!

    Le problème vient bien de la version de PHPExcel dans le plugin sfPhpExcel.

    Encore merci, tu m'as enlevé un tronc du pied !!!

    cli16 --

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/09/2014, 13h40
  2. [Excel] passer d'un fichier excel à un fichier xml
    Par neclicpasici dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 30/04/2007, 09h52
  3. Réponses: 2
    Dernier message: 23/03/2007, 09h41
  4. Réponses: 35
    Dernier message: 29/05/2006, 08h15
  5. Réponses: 3
    Dernier message: 19/12/2005, 14h11

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