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

Langage PHP Discussion :

[PhPExcel] Fichiers illisibles


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 40
    Points : 28
    Points
    28
    Par défaut [PhPExcel] Fichiers illisibles
    Salutations,

    Cela fait quelques mois maintenant que j'utilise phpExcel, et il y a toujours un bug que je ne parviens pas à corriger. J'arrive presque à le reproduire et l'éviter mais je ne comprends pas d'où il vient et cette part d'aléatoire va finir par poser problèmes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    03-Nov-2016 14:08:44 UTC] PHP Notice:  Trying to get property of non-object in C:\Softs\wamp\www\v3\Classes\PHPExcel\Reader\Excel2007.php on line 1365
     
    [03-Nov-2016 14:08:44 UTC] PHP Warning:  Invalid argument supplied for foreach() in C:\Softs\wamp\www\v3\Classes\PHPExcel\Reader\Excel2007.php on line 1365
     
    [03-Nov-2016 14:08:44 UTC] PHP Notice:  Undefined offset: 0 in C:\Softs\wamp\www\v3\Classes\PHPExcel\Reader\Excel2007.php on line 1381
     
    [03-Nov-2016 14:08:44 UTC] PHP Fatal error:  Call to a member function attributes() on null in C:\Softs\wamp\www\v3\Classes\PHPExcel\Reader\Excel2007.php on line 1383
    Voici l'erreur.

    Elle se produit parfois lors de la tentative de lecture d'un fichier Excel.
    Pour reproduire le bug, il me faut ouvrir un fichier déjà modifié par phpExcel, à la fermeture il me demande d'enregistrer même si je n'effectue aucune modification. Le fichier devient alors illisible par phpExcel si j'enregistre.
    Initialement, le fichier avant modification fait environ 540ko. Après modification par phpExcel il passe à 800. Lorsque j'ouvre et enregistre le fichier même sans modifications, il repasse à environ 540.

    Pour résoudre le problème, je dois dégager les logos dans les entêtes de mes onglets.

    La demande d'enregistrement peut se produire dans le cas où des liens vers des ressources externe existent, où qu'il y a des ajouts automatique de date du jour, mais ce n'est pas le cas ici.

    Est-ce que quelqu'un a déjà expérimenté ce genre de difficultés, et su le résoudre ?

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Ton fichier est illisible parce que, comme tu l'as remarque, il y a du texte d'erreur qui tente de s'écrire dedans et pourrit totalement l'ensemble. La solution de facilitée consiste à baisser le niveau d'erreurs affiché (voire à tout cacher). La bonne solution consiste à chercher dans le code la ligne qui provoque cette erreur et tenter de la corriger (ou au moins de trouver ce qui la provoque dans ton Excel).
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 40
    Points : 28
    Points
    28
    Par défaut
    Baisser le niveau d'erreurs affichés ? Je ne suis pas certain de comprendre.
    Genre ne pas afficher les erreurs en quittant le debug mode dans la config serv ? Ce n'est pas vraiment une solution puisque l’exécution du code s'arrête une fois cette erreur rencontrée.

    Chercher la ligne de code qui provoque l'erreur directement dans phpExcel ? Cela semble compliqué vu la complexité du fichier, je ne suis pas certain de ne pas introduire d'autres bugs involontairement.

    Je sais (ou du moins suppose) ce qui la provoque dans Excel. Mais ca, c'est parce que je suis le dev et que j'ai la main complète sur le système, que je peux tester et remplacer facilement les fichiers moisis. L'utilisateur lui, ce ne sera pas la même.

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu utilises bien la dernière version de PHPExcel ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 40
    Points : 28
    Points
    28
    Par défaut
    J'utilise cette version:
    https://github.com/nekulin/PHPExcel
    Qui corrige un autre bug que j'avais de temps à autres.

    Je viens de tester avec une version 1.8 que j'ai dl en avril dernier, même erreur.
    Dans le doute, j'ai test avec la dernière version sur ce repo: https://github.com/PHPOffice/PHPExcel

    J'ai une erreur similaire: (une des deux semble être corrigée)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Notice: Undefined offset: 0 in C:\Softs\wamp\www\v3\Classes\PHPExcel\Reader\Excel2007.php on line 1388
     
    Fatal error: Call to a member function attributes() on null in C:\Softs\wamp\www\v3\Classes\PHPExcel\Reader\Excel2007.php on line 1390

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    En regardant le code du dernier lien que tu as donné, le problème est au niveau de ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $imageData = $shape->xpath('//v:imagedata');
    $imageData = $imageData[$idx]; // 1388
     
    $imageData = $imageData->attributes('urn:schemas-microsoft-com:office:office'); //1390
    Autrement dit, xpath n'a pas trouvé le pattern recherché, il n'y a pas de sécurité vérifiant le cas et du coup ça se banane. Je crains qu'à ce stade, il faille ouvrir une issue directement sur PHPExcel, parce que honnêtement pour moi, c'est du chinois.

    Sinon, un peu de contexte : tu travailles avec des fichiers .xls ou .xlsx ? générés complètement par PHPExcel ou créés par Excel, puis modifiés par PhpExcel ? dans le 2e cas, quelle version d'Excel ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 40
    Points : 28
    Points
    28
    Par défaut
    A la base ce sont des fichiers xls qui ont été convertis en xlsx (j'avais trop de soucis avec phpExcel et le format xls). Ils sont ensuite uploadés sur mon serv, lu et modifiés par phpExcel. Il et alors possible de les télécharger, les modifier, et les réuploader pour une nouvelle série de lecture/modifications.
    Moi non plus je ne comprends pas grand chose non plus au code interne de phpExcel.

    Ce que j'ai fais du coup, j'ai commenté tous le bloc foreach qui visiblement ne travaille que sur les entêtes et les images (d'où la résolution du problème en virant les images des entêtes). Ca a l'air de tenir pour l'instant.
    Edit: le résultat est que ca dégage systématiquement les images des entêtes. On va dire que ca résout une partie du problème.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 40
    Points : 28
    Points
    28
    Par défaut
    En commentant uniquement les foreach, il y avait encore des problèmes.
    D'ailleurs, même sans les logos dans les entêtes de mes pages, cette erreur revenait régulièrement avant d'apporter la moindre modification perso.

    En commentant carrément tout le bloc // Header/footer images (de la ligne 1350 à 1406. Je n'ai plus aucun problèmes. Ca c'était en ce qui concerne le reader. Pour le writer, aucun problèmes à noter. Je peux correctement mettre du texte dans les entêtes.

    Reste un dernier point assez étrange qui doit être lié. Sur certains fichier Excel, j'ai le logo en guise d'icone. Sur d'autres, j'ai un aperçu de la feuille de calcul. Tous sont au même format, mais dans un même format il doit y avoir d'autres paramètres cachés.

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

Discussions similaires

  1. [PHPExcel] Fichier XLSX > 150000 lignes
    Par JmL40 dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 21/06/2012, 12h25
  2. [PHPExcel] Fichiers XLS ou XLSX
    Par Friksstyle dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 04/06/2012, 13h57
  3. [PHP Excel] Fichier généré corrompu
    Par guernoulle dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 25/11/2009, 10h04
  4. fichier illisible sous notepad
    Par niko8181 dans le forum Windows
    Réponses: 8
    Dernier message: 10/03/2008, 17h57
  5. [Manip de fichiers] Fichier illisible ?!
    Par LTN dans le forum Langage
    Réponses: 5
    Dernier message: 13/07/2006, 14h30

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