Dépannage PHPExcel

Cet article fait suite à l'article « Génération d’un fichier Excel (.xlsx) en PHP avec PHPExcel ».

L'utilisation de PHPExcel est simple à prime à bord. Cependant, lorsqu'une erreur survient, il peut être difficile d'en cibler la cause.

Voici un guide de dépannage pour vous aider.

▼Publicité

Erreur « Impossible d'ouvrir le fichier car son format ou son extension n'est pas valide »

Problème :

Lorsque votre programme génère un fichier Excel à l'aide de la bibliothèque PHPExcel, tout semble se dérouler normalement. Cependant, quand vous essayez d'ouvrir le fichier envoyé à votre navigateur, vous obtenez le message « Impossible d'ouvrir le fichier car son format ou son extension n'est pas valide. Vérifiez que le fichier n'est pas endommagé et que son extension correspond bien au format du fichier ».

Erreur PHPExcel : Impossible d'ouvrir le fichier

Une bonne façon de connaître la nature du problème consiste à ouvrir le fichier à l'aide d'un éditeur comme Notepad++. Il est probable qu'un message d'erreur ait été enregistré dans le fichier à la place des données Excel. 

Cause possible :

Il manquait un require. 

Le contenu du fichier Excel pourrait ressembler à ceci :

<br />
<b>Fatal error</b>:  Class 'PHPExcel_IOFactory' not found in <b>C:\Program Files (x86)\EasyPHP-DevServer-13.1VC11\data\localweb\gagnonannie-generateurstatistiques\excel.php</b> on line <b>19</b><br />

Solution :

Retrouver le nom du fichier qui définit la classe ou la fonction introuvée puis ajouter l'instruction require correspondante.

Autre cause possible :

Il y a des lignes blanches en dehors du code PHP. 

Lorsqu'on regarde le contenu du fichier Excel dans Notepad++, on ne voit qu'une suite de simagrés.

Solution :

Partout dans le fichier qui génère le fichier Excel, enlever tout caractère situé entre ?> et <?php.

Ex :

PHP

<?php 

   ...

?>

    

<?php

   ...

   $writer->save('php://output');

?>

Autre cause possible :

Des balises HTML ont été envoyées au navigateur par cette page avant la génération du fichier Excel. 

Lorsqu'on regarde le contenu du fichier Excel dans Notepad++, on voit le code HTML généré.

Solution :

Dans le fichier qui génère le fichier Excel, enlever tout envoi de caractères HTML avant la génération. Il ne doit pas y avoir de <!DOCTYPE html> ni aucune autre balise HTML.

Ex :

PHP

<!DOCTYPE html>

<html lang="fr-CA">

   <head> 

       ...

   </head>

   <body>

      ...   

<?php

      ...

      $writer->save('php://output');

?>

Erreur « Excel a rencontré un contenu illisible »

Problème :

Lorsque votre programme génère un fichier Excel à l'aide de la bibliothèque PHPExcel, tout semble se dérouler normalement. Cependant, quand vous essayez d'ouvrir le fichier envoyé à votre navigateur, vous obtenez le message « Excel a rencontré un contenu illisible. Voulez-vous récupérer le contenu de ce classeur ? Si la source est fiable, cliquez sur Oui ».

Erreur PHPExcel : Excel a rencontré un contenu illisible

Cause possible :

Des caractères indésirables ont été générés à la fin du fichier Excel. Le fichier est tout de même lisible (cliquez sur Oui) mais ce message risque de faire peur aux internautes.

Solution :

Assurez-vous qu'il ne reste aucun caractère, pas même des espaces, après les balises de fin PHP dans le fichier où le fichier Excel est généré.

Ex :

PHP

...

$writer->save('php://output');

?>   

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories

13 commentaires

  1. TZVETAN

    Bonjour,
    Ceci n’est pas un commentaire mais plus un appel au secours…
    Je travaille sur un poste Windows 7 (64) et Wampserver avec PHP.5.4.16.
    La syntaxe pour inclure un fichier est-elle la même que celle que vous écrivez ?
    Merci

    • Christiane Lagacé

      Bonjour,

      La syntaxe pour inclure un fichier PHP est la même. Ce qui peut changer, c’est votre structure de dossiers.

      Par exemple, si vous placez le fichier à inclure dans un sous-dossier nommé include, la syntaxe sera la suivante :

      require_once ‘include/monfichier.php’;

      L’article « Définir un chemin vers un fichier sur le Web » vous aidera à trouver la bonne syntaxe pour accéder au dossier désiré.

      Bonne chance !

      Christiane

  2. Axess

    Bonjour,
    Suite au message d’erreur « impossible d’ouvrir le fichier car son format… » etc, j’ouvre mon fichier .xlsx avec Notpad++ comme vous le conseillez.
    Il y a 1 ligne et 294336 colonnes de « NUL » qui apparaissent…
    Pas de « fatal error », pas « ?php ». Seulement des « NUL ».
    Il me faut absolument récupérer mon fichier…
    Pouvez-vous m’aider ?
    Merci.

  3. Christiane Lagacé

    Bonjour Axess,

    Je n’ai jamais rencontré ce problème. Il faudrait savoir comment le fichier a été généré. Sans voir votre code, difficile de vous guider.

    Envoyez-moi un message privé et je verrai si je peux vous aider.

    Christiane

  4. Impossible d’ouvrir un fichier excell après l’avoir enregistré sur clef usb et par erreur retiré la clef USB pendant l’enregistrement
    depuis le fichier composé de 14 feuilles de calculs 2 généraux et ensuite 1 par mois
    impossible d’ouvrir
    que dois je faire déjà tout essayé et via un demo de récupération de données pu ouvrir mais y a quasi rien dedans…

    • Christiane Lagacé

      Bonjour,

      Le fichier est probablement incomplet ou corrompu puisqu’il n’a pas été entièrement enregistré avant que la clé soit retirée. La seule solution consiste à le générer à nouveau ou, si vous avez encore accès à l’orignal, d’en faire une nouvelle copie.

      Bonne chance

      Christiane

  5. mouhiiddine

    bonjour,

    prière de m’aider a résoudre le problème de la langue arabe avec PHPEXCEL.
    les caractères en arabe ne s’affiches pas dans la feuille crée.
    vous trouvez ci-dessous les données exportées:

    FAUX FAUX FAUX modaai modaai_ali montant sujet
    1/7101/2015 FAUX 7101 FAUX FAUX 100000 FAUX
    2/8103/2015 FAUX 8103 FAUX FAUX 300000 FAUX
    3/7103/2015 FAUX 7103 FAUX FAUX 399999 FAUX
    4/7101/2015 FAUX 7101 AA FAUX 245 jhjjjhjhhhjhj
    5/7109/2015 FAUX 7109 gafffff gift of line 4454 « bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
    llllllllllllllllllllllll
    kkkkkkkkkkkkkkkkk »
    6/7202/2015 FAUX 7202 A FAUX 2222 a

    • Christiane Lagacé

      Bonjour,

      Je suis désolée, ne n’ai jamais eu à travailler avec des caractères arabes. Je sais que PHP Excel les supporte grâce à l’encodage UTF-8 mais je ne saurais vous aider à résoudre votre problème.

      Christiane

  6. abir

    Bonjour,

    Merci pour votre article que je trouve très intéressant.
    Pour mon cas, j’ai rencontré les deux problèmes à la fois, en ouvrant le fichier généré .xlsx avec Notepad++ j’ai un affichage du genre « PK ¤ƒF›[ûv ` [Content_Types].xmlµ•MNÃ0…÷œ »ò%n»@5í‚Â*Q`ìIcÕ±-ûw{&I©)UÊ&“(yï?•ñtW™dµ³9f–€•Ni»ÌÙûâ9½g Fa•0ÎBÎö€l:¹/ö0!±Åœ•1úÎQ–P ÌœKo
    *é1,¹r%–ÀGƒÁ—ÎF°1µ›Œ_‰´‚d.B|aøÎðHnÐ^‡ù±ä±Öìœ ï– »Rã|cÕ/jêŠBKPN®+’dÍmíÂO1î
    `oú Ba +“µ¦Gò ».

    Pourriez vous m’aider svp,
    Merci d’avance
    Abir

    • Christiane Lagacé

      Bonjour Abir,

      J’ai besoin de plus d’information pour vous aider. Envoyez-moi votre code dans un message privé et j’y jetterai un coup d’oeil.

      Salutations !
      Christiane

  7. beti

    Bonjour Christian et tous les autres je vous prie de me porter un coup de pousse j’ai cette erreur « Impossible d’ouvrir le fichier car son format ou son extension n’est pas valide. Vérifiez que le fichier n’est pas endommagé et que son extension correspond bien au format du fichier ». mais que j’édite le fichier voici ce à quoi il ressemble:
    Notice: Undefined offset: 2 in C:\xampp\htdocs\saham\SAHGES REPORT\Classes\PHPExcel\Calculation.php on line 2944

    Notice: Undefined offset: 2 in C:\xampp\htdocs\saham\SAHGES REPORT\Classes\PHPExcel\Calculation.php on line 2944

  8. Christiane Lagacé

    Bonjour Beti,

    Voici quelques pistes :
    – Est-ce que vous utilisez les noms de fonctions Excel en anglais ? Les fonctions en français (ex : SOMME() ) ne fonctionnent pas et doivent être remplacées par leur équivalent anglais (ex : SUM() ) à moins d’utiliser un pack de localisation.
    – Est-ce que vous utilisez la virgule comme séparateur d’arguments ? L’utilisation du point-virgule ne fonctionnera pas.