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 --