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 :

[PHPExcel] Impossible d'ouvrir le fichier xlsx


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut [PHPExcel] Impossible d'ouvrir le fichier xlsx
    Bonjour à tous !

    Voila mon problème, j'ouvre un fichier créé sous 2010 en xlsx, je rajoute des valeurs dans les cellules, jusque la tout va bien.
    Après je veux insérer une formule et là le fichier ne veut plus s'ouvrir avec un message d'erreur comme quoi le format ou l'extension du fichier n'est pas bon.

    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
     
    include 'PHPExcel.php';
    include 'PHPExcel/Writer/Excel2007.php';
     
    // Connexion à la base et requête SQL
    ...
     
    $objet = new PHPExcel_Reader_Excel2007();
    $excel = $objet->load('reporting.xlsx');
     
    $sheet = $excel->getSheet(1);
     
    $ligne=2;
    while($data = mysql_fetch_assoc($req)) {
     
    	$sheet->setCellValue('D'.$ligne, "=JOURSEM(Y2)"); //cette ligne ne marche pas
     
    	$sheet->setCellValue('A'.$ligne, "=SI(1=1;1;0)"); //cette ligne ne marche pas
    	$sheet->setCellValue('A'.$ligne, "=IF(1=1,1,0)"); //cette ligne marche
     
    	$sheet->setCellValue('A'.$ligne, "=SI(ET(AL2='D';Z2>='08:00:00';Z2<'18:00:00');1;0)"); // cette ligne ne marche pas
    	$sheet->setCellValue('A'.$ligne, "=IF(ET(AL2='D',Z2>='08:00:00',Z2<'18:00:00'),1,0)"); // cette ligne ne marche pas non plus
    	$sheet->setCellValue('A'.$ligne, '=IF(ET(AL2="D",Z2>="08:00:00",Z2<"18:00:00"),1,0)'); // devinez !? :(
     
    	$sheet->setCellValue('Y'.$ligne, $data['c1']); // Cette ligne marche
    	$ligne++;
    }
     
    $writer = new PHPExcel_Writer_Excel2007($excel);
     
    //sortie sur le navigateur
    header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition:inline;filename=reporting.xlsx');
    $writer->save('php://output');
    Voila je ne comprend rien, c'est plutôt étrange comme comportement.
    Alors j'ai essayé plein de truc, mais ca ne fonctionne toujours pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ini_set('mbstring.internal_encoding', 'ISO-8859-1');
    $writer->setOffice2003Compatibility(true);
    Merci d'avance pour votre aide !

    See you

  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 : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    A quel endroit essayes-tu de rouvrir ton fichier ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    Enfaite lorsque j exécute la page php Firefox m'ouvre une fenêtre de téléchargement du fichier.

    Tout marche bien c'est juste quand je rajoute des formules que ca plante.
    En plus j'ai l'impression qu'il faut les écrire d'une manières différente que dans Excel, genre en version anglaise .. un truc comme ca.

    Merci

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ouvre le fichier obtenu avec un editeur de texte pour voir s'il n'y a pas des erreurs PHP dedans.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    oui j'ai regardé, j'avais vu nu message où il disait de faire ca, mais a part des caractères incompréhensible, je ne vois pas de message d'erreur venant de PHP.
    D'ailleurs, pour voir si il y a des messages d'erreurs PHP, je met en commentaire les lignes suivantes, et l'erreur apparait directement dans le navigateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition:inline;filename=reporting.xlsx');
    $writer->save('php://output');

  6. #6
    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 : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Citation Envoyé par boobha Voir le message
    mais a part des caractères incompréhensible, je ne vois pas de message d'erreur venant de PHP.
    Donc à la base ton fichier Excel est corrompu ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    Non mon fichier va très bien.
    je vous dit tout marche bien, c'est quand je rajoute une des lignes suivantes que j'ai ce message d'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $sheet->setCellValue('D'.$ligne, "=JOURSEM(Y2)");
     
    $sheet->setCellValue('A'.$ligne, "=SI(1=1;1;0)");
     
    $sheet->setCellValue('A'.$ligne, "=SI(ET(AL2='D';Z2>='08:00:00';Z2<'18:00:00');1;0)");
     
    $sheet->setCellValue('A'.$ligne, "=IF(ET(AL2='D',Z2>='08:00:00',Z2<'18:00:00'),1,0)"); // cette ligne ne marche pas
     
    $sheet->setCellValue('A'.$ligne, '=IF(ET(AL2="D",Z2>="08:00:00",Z2<"18:00:00"),1,0)'); // devinez !? :(
    Merci pour votre aide

  8. #8
    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 : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Anglais ou français , faut choisir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sheet->setCellValue('A'.$ligne, "=IF(ET(AL2='D',Z2>='08:00:00',Z2<'18:00:00'),1,0)");
    devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sheet->setCellValue('A'.$ligne, "=IF(AND(AL2='D',Z2>='08:00:00',Z2<'18:00:00'),1,0)");
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sheet->setCellValue('A'.$ligne, "=SI(ET(AL2='D',Z2>='08:00:00',Z2<'18:00:00'),1,0)");

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    Malheureusement, ni l'un ni l'autre ... ne marche ... snif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $sheet->setCellValue('A'.$ligne, "=IF(AND(AL2='D',Z2>='08:00:00',Z2<'18:00:00'),1,0)");
    $sheet->setCellValue('A'.$ligne, "=SI(ET(AL2='D',Z2>='08:00:00',Z2<'18:00:00'),1,0)");
    Mais pourquoi ce code marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $sheet->setCellValue('Y'.$ligne, $data['c1']);
    ou
    $sheet->setCellValue('A'.$ligne, "=IF(1<2,1,0)");
    Et lui non :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $sheet->setCellValue('A'.$ligne, "=SI(1<2;1;0)");
    $sheet->setCellValue('A'.$ligne, "=IF(Z2>='08:00:00',1,0)");
    J'ai l'impression que j'ai un problème de compatibilité mais je ne mis connais pas assez en PHP ou PHPExcel pour identifier mon problème de fond.

    Que dois je vérifier pour être sure que ce outil marche avec ma config ?
    A savoir que je suis sous WAMPSERVER 2.0, Office 2010 et Windows 7.

    Merci pour votre aide car la je bloque la dessus et je n'arrive pas à avancé :/
    C'est dommage c'est exactemetn l'outil qu'il me faut !

    See you

  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 : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sheet->setCellValue('A'.$ligne, "=IF(Z2>='08:00:00';1;0)");

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    alors j'ai un peu revu le code maintenant je fais ca et j'ai testé avec ta derniere suggestion et voila le beau msg d'erreur :

    Fatal error: Uncaught exception 'Exception' with message 'Feuil1!A2 -> Formula Error: An unexpected error occured' in C:\Users\boobha\Documents\www\stats\PHPExcel\Cell.php:272 Stack trace: #0 C:\Users\boobha\Documents\www\stats\PHPExcel\Writer\Excel2007\Worksheet.php(969): PHPExcel_Cell->getCalculatedValue() #1 C:\Users\boobha\Documents\www\stats\PHPExcel\Writer\Excel2007\Worksheet.php(910): PHPExcel_Writer_Excel2007_Worksheet->_writeCell(Object(PHPExcel_Shared_XMLWriter), Object(PHPExcel_Worksheet), 'A2', Array, Array) #2 C:\Users\boobha\Documents\www\stats\PHPExcel\Writer\Excel2007\Worksheet.php(82): PHPExcel_Writer_Excel2007_Worksheet->_writeSheetData(Object(PHPExcel_Shared_XMLWriter), Object(PHPExcel_Worksheet), Array) #3 C:\Users\boobha\Documents\www\stats\PHPExcel\Writer\Excel2007.php(260): PHPExcel_Writer_Excel2007_Worksheet->writeWorksheet(Object(PHPExcel_Worksheet), Array) #4 C:\Users\boobha\Documents\www\stats\extract_INRAP.php(117): PHPExcel_Writer_Excel2007->save('test.xlsx') #5 {main} thrown in C:\Users\boobha\Documents\www\stats\PHPExcel\Cell.php on line 272

    Voici mon nouveau codage de page avec IOFactory (qui ne marche toujours pas bien sur) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    include 'PHPExcel/IOFactory.php';
     
    $objPHPExcel = PHPExcel_IOFactory::load("models/test.xlsx");
     
    $sheet = $objPHPExcel->getSheet(0);
     
    $sheet->setCellValue("A1", "OK"); //ligne qui marche
    $sheet->setCellValue("A2", "=IF(Z2>='08:00:00',1,0)"); //ligne qui marche pas
     
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
    $objWriter->save('test.xlsx');

    J'ai l'impression que je vous pose un big problème là ^^

    Merci encore pour votre aide et votre patience

    See you

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Excel prend des doubles guillemets pour les chaines :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sheet->setCellValue("A2", '=IF(Z2>="08:00:00",1,0)');
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    BRAVO Sabotage ! C'est bien ca
    J'ai modifié toutes mes lignes en conséquence et tout marche bien maintenant !

    Merci à tous

    Pour être encore un peu c**** c******, est ce normal de devoir tout mettre en anglais ? (je m en contenterais ^^)

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    Ah une autre chose, j'utilise donc un fichier template pour faire un tableau de statistique, et bien sur dans ce fichier il y a d'autres formules déjà écrites.
    ben il me met une erreur sur ces cellules là aussi, alors je vais devoir remplir toutes les formules via le PHP ou y a t'il un autre moyen ?

    rerereMerci

  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 : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    salut, je comprend pas bien la question, si il y a des erreurs au débuts de ton fichiers, il faut le régler avant.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    Enfaite j'ai préparé mon fichier Excel avant, donc toutes les fonctions marchent parfaitement. Elles sont écrites en français, avec des ; au lieu des , etc ...

    Mais là quand j'ouvre mon fichier template avec les mêmes formules donc et que je sauvegarde le fichier après l'avoir modifié via PHPExcel il me met un msg d'erreur :
    Fatal error: Uncaught exception 'Exception' with message 'TAB ACD!F3 -> Invalid cell coordinate...
    alors dans la cellule 'TAB ACD!F3' j'ai ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $sheet->setCellValue('F3', "=AVERAGE('ACD'!AH:AH)/86400");
    ou
    $sheet->setCellValue('F3', '=AVERAGE(ACD!AH:AH)/86400');
    Bien sur si je met ca tout va bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sheet->setCellValue('F3', 'toto');
    ++

  17. #17
    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 : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    et donc j'aurais tendance à dire ....même souci que précédemment, les quotes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sheet->setCellValue('F3', '=AVERAGE("ACD"!AH:AH)/86400');

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    j'avais effectivement testé ca mais ca ne marche pas, j'ai un message d'erreur :

    Fatal error: Uncaught exception 'Exception' with message 'TAB ACD!F3 -> undefined variable '!''

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    enfaite il n'aime pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sheet->setCellValue('F3', '=AVERAGE(ACD!AH:AH)/86400');
    mais préfère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sheet->setCellValue('F3', '=AVERAGE(ACD!AH2:AH'.$totalReq++.')/86400');
    il faut donc lui donner un numéro de ligne et pas le range d'une colonne complète.

    ++

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

Discussions similaires

  1. [PHPExcel] Impossible d'ouvrir le fichier
    Par dhonore dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 25/06/2013, 13h15
  2. [PHPExcel] Suivant le PC, impossible d'ouvrir le fichier
    Par Friksstyle dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 11/01/2013, 16h46
  3. [WD12] Impossible d'ouvrir un fichier xlsx ?
    Par zouzoukha dans le forum WinDev
    Réponses: 1
    Dernier message: 08/10/2010, 18h19
  4. Impossible d'ouvrir le fichier " .xlsx"
    Par stratocasters dans le forum Général Java
    Réponses: 0
    Dernier message: 13/10/2009, 10h51
  5. [2007] Impossible d'ouvrir le fichier " .xlsx"
    Par stratocasters dans le forum Microsoft Office
    Réponses: 0
    Dernier message: 12/10/2009, 13h19

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