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 :

Erreur avec PHPExcelReader


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 117
    Par défaut Erreur avec PHPExcelReader
    Bonsoir,

    Voilà, j'ai un fichier excel composé de 3 colonnes et de x lignes. Je dois pouvoir lire les informations de ce que contient ce tableau (sauf la première qui correspond au en-tête genre nom, prénom, etc...) de n'importe où qu'il soit placé (genre s'il débute ligne 20 colonne 20 je doit commencer la lecture de là).

    Bref, ce n'est pas le problème qui me préoccupe. En gros, tout marche. Mais j'ai des messages que je ne n'arrive pas à comprendre et qui pour moi ne devrait pas apparaitre.

    Voilà mon code :

    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
    $fichier = "F:\ProjetPHP\FichierTest\FichierTest.xls";
    include "Excel/reader.php";
    $xlsReader = new Spreadsheet_Excel_Reader();
    $xlsReader->read($fichier);
    $nbRows = $xlsReader->sheets[0]["numRows"];
    $nbCols = $xlsReader->sheets[0]["numCols"];
    $cNom = 0;
    $cPrenom = 0;
    $cMail = 0;
    $ligne = 0;
    for($i = 1;$i <= $nbRows;$i++){
    	for($j = 1;$j <= $nbCols;$j++){
    		if($xlsReader->sheets[0]["cells"][$i][$j] == "NOM"){
    			$cNom = $j;
    			$cPrenom = $j+1;
    			$cMail = $j+2;
    			$ligne = $i+1;
    			break;
    		}
    	}
    }
    for($i = $ligne;$i <= $nbRows;$i++){
    	echo "NOM : ".$xlsReader->sheets[0]["cells"][$i][$cNom]." / PRENOM : ".$xlsReader->sheets[0]["cells"][$i][$cPrenom]." / MAIL : ".$xlsReader->sheets[0]["cells"][$i][$cMail]."<br />";
    }
    Mes messages d'erreur sont les suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Deprecated: Assigning the return value of new by reference is deprecated in C:\wamp\www\ProjetPHP\Excel\reader.php on line 261
    Alors celui, honnetement, je ne le comprend absolument pas.

    Les autres sont de ce type là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Notice: Undefined offset: 2 in C:\wamp\www\ProjetPHP\formEtudiant.php on line 22
    Ceux la me paraisse bizarre car il corresponde à mes boucles for. Pour moi, cela veut dire que je sort du tableau (indice trop grand). Or, je n'en sors jamais (le tableau excel va de l'indice 1 a numRows, j'ai testé pour être sur).

    Pour info la ligne 22 est celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($xlsReader->sheets[0]["cells"][$i][$j] == "NOM"){
    La seule solution que j'ai trouvé, c'est de mettre ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error_reporting(E_ALL ^ E_NOTICE);
    Mais bon, je préférerais comprendre d'où vienne les erreurs plutôt que de les cacher.

    Si vous avez une solution.

    Merci d'avance.

  2. #2
    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
    Pour la premiere erreur, il y a une syntaxe obsolète dans le code, si elle n'est pas corrigée dans la dernière version, tu peux le faire toi même en enlevant le & à la ligne indiquée.

    Pour la deuxième, tu es sur que le compte ne commence pas à 0 ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 117
    Par défaut
    Merci, la première erreur est corrigée.

    Pour la deuxième, tu es sur que le compte ne commence pas à 0 ?
    Oui sûr. J'ai fait le test suivant :

    j'ai mis dans mon fichier excel sur la premiere page dans la case A1 du texte.

    Quand je test avec un echo $xlsReader->sheets[0]["cells"][0][0] j'ai un message d'erreur (offset quelque chose il me semble) et quand je test echo $xlsReader->sheets[0]["cells"][1][1] il me retourne bien le texte de la cellule A1. Par contre les feuille elle commence à 0.

    Sinon autre petite question, qui n'a plus rien à voir avec les erreurs mais je en trouve pas de réponses :

    Mon projet est un projet pour l'école. On me demande de pouvoir lire un fichier excel et de faire ce qui est écrit au dessus cad trouver le tableau et lire les données. Je travail en local. Comment faire pour récupérer le chemin complet du fichier ? J'utilise un input type="file" mais la valeur qu'il retourne est uniquement le nom du fichier. Or, j'ai besoin de tout le chemin pour que PHPExcelReader me le trouve et le lise. Sur le net, certains dise que c'est impossible avec php par question de sécurité. Je n'ai pas besoin d'uploader ce fichier excel, juste de le lire une fois sélectionné. Je ne trouve pas de solution.

    Merci d'avance.

  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
    Pour le lire il faut bien que les données du fichier passe du poste client au serveur : c'est un upload.

    Pour ton autre problème , tu es sur que c'est cette ligne la qui provoque l'erreur ?
    Est-ce que tu n'aurais pas de lignes dans ton fichier excel qui n'ont pas la meme taille ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 117
    Par défaut
    Qu'entends-tu par "qui n'ont pas la même taille" ?

    Car la seule chose que j'ai fait avec mon excel, c'est de remplir les cases avec du texte. J'ai rien touché de plus. Et j'ai également testé, la lecture d'une case vide fonctionne. Sinon la ligne correspondant à l'erreur est celle que j'ai donnée, après avec php il se peut que l'erreur vienne d'avant mais pour ce qui est de la ligne donnée dans l'erreur c'est bien celle que je t'ai indiqué.

  6. #6
    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
    Puisque tu parcours ton fichier ligne par ligne jusqu'a la dernière colonne, si toutes les lignes n'ont pas le meme nombre de cellules en largeur, tu as des cellules vides.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 117
    Par défaut
    Si la dessus c'est bon, toutes les lignes ont le même nombre de cellule.

    Mais j'ai eu à faire la même chose en java, et ça a l'air de fonctionner de la même manière, c'est à dire que la zone de lecture se place au bord de la dernière colonne rempli et de la dernière ligne rempli. C'est a dire que si je rempli A1, B1 et A2, si j'essaye de lire B2 cela devrait être bon, mais si j'essaye de lire des cellule genre C1, C2 ou A3 par exemple, ben message d'erreur car en dehors de la zone. En tout cas c'est comme ça que je l'ai compris.

    Mais sinon mon fichier excel est composé de la manière suvante : les 3 première lignes et les 2 premières colonne sont vide. Après, j'ai trois colonne et 10 lignes rempli. Donc chaque ligne est composé de 2 cellules vides puis de 3 cellules remplis.

  8. #8
    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
    Justement j'ai fais le test, une cellule vide n'existe pas dans la tableau sheets et tenter d'y accèder renvoit donc un warning.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 117
    Par défaut
    Hum exact, je viens de refaire le test. Va comprendre pourquoi, hier j'ai demander de tout afficher jusqu'a numRows et numCols, quand il rencontrait une cellule pleine il affichait son contenu et quand il en rencontrait une vide il m'affichait rien sans message d'erreur

    Bon j'ai pû qu'a faire un test savoir si la cellule est vide.

    Je vais tester ça.

    EDIT : en fait, je pense qu'il n'y a pas de solution. PHPExcelReader affiche donc des erreurs lorsqu'on essaye de lire une cellule vide, mais je suis obligé d'essayer de lire ces cellules pour trouver le début de mon tableau. C'est pour ça qu'est utilisé la ligne de code suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error_reporting(E_ALL ^ E_NOTICE);
    Elle permet de cacher ces erreurs.

    Sinon, pour l'autre problème, je fais la lecture du fichier temporaire stocké sur le serveur, cela me permet de lire le fichier excel sur le coup sans avoir besoin de le stocker.

    En tout cas, merci pour les réponses.

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

Discussions similaires

  1. Erreur Avec Interbase
    Par smokemon dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/10/2004, 08h24
  2. Erreur avec procédure LockWorkStation ...
    Par simonseztech dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/08/2004, 16h33
  3. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 16h45
  4. Erreur avec les ADO
    Par megane dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2004, 22h37
  5. Erreur avec WM_COMMAND (BN_CLICKED)
    Par cyberlewis dans le forum Windows
    Réponses: 2
    Dernier message: 09/02/2004, 01h25

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