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 :

Lire un xlsx au lieu d'un csv


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 016
    Points : 308
    Points
    308
    Par défaut Lire un xlsx au lieu d'un csv
    Bonjour à tout le monde.

    J’utilise le petit code php que voici :

    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
    <?php
    $fichier = "dates/dates.csv";
    $fic = fopen($fichier, 'rb');
    echo '<table border="1">'."\n";
    $objNow = date_create();
    /*echo '<td>'.$objNow.'</TD>;*/
    while (($ligne = fgetcsv($fic, 1024, ';')) !== FALSE) {
    $objDate=date_create($ligne[0]);
      if ($objDate > $objNow) {
      echo
      <<<HTML
    <p>
    <img src="{$ligne[1]}" align=left hspace=12>
    <span style='text-align: left; font-size: 24px; line-height:30px;'>{$ligne[2]}</span>
    </BR>
    <span style='text-align: left; font-size: 16px; line-height:22px;'>{$ligne[3]}</span>
    </BR>
    <span style='text-align: left; font-size: 14px; line-height:22px;'>Réservation : <a href="{$ligne[4]}" target="_blank">Site internet - </a> <a href="{$ligne[5]}">Par e-mail </a>                                                                                                   </span>
    </BR>
    <span style='text-align: left; font-size: 14px; line-height:22px;'>Numéro de téléphone : {$ligne[6]}</span>                                                                                                         </span>
    </BR>
    <span style='text-align: left; font-size: 14px; line-height:1px;'>------------------------------------------------------------------</p>
    HTML;
     
      }
      else {
     
      }
     
    }
    echo '</table>'."\n";
    fclose($fic);
    ?>
    Ce bout de code va lire un fichier CSV, il en sort des données qu'il exploite ensuite pour créer un agenda des spectacles à venir.
    Je voudrais modifier ce code pour qu'au lieu de lire un CSV il puisse directement lire un xlsx qui est le format original dans lequel les données sont stockées.
    J'ai vu qu'il y a des manière plus ou moins complexes de lire un XLSX mais aucun ne ressemble à mon code actuel ce qui m'oblige a tout ré-écrire.
    Est ce vraiment le cas ou existe t'il une manière d'adapter ce que j'ai et qui me donne (presque) entière satisfaction ?

    Merci de votre aide :-)

  2. #2
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 016
    Points : 308
    Points
    308
    Par défaut
    Bon en espérant que ça intéresse un peu plus quelqu'un... fait chaud hein :-)...

    J'ai trouvé sur le net PHP Excel qui semble être THE truc pour lire de l'excel en PHP.

    J'ai modifié un petit bout de code fournit comme example pour faire ceci :
    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
    <?php
    /** Charger la bibliothèque **/ 
    set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
    include 'PHPExcel/IOFactory.php';
     
    /** définir le fichier à examiner*/ 
    $inputFileName = './sampleData/example1.xls';
     
    /** la je ne comprends plus très bien*/
    $objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
    $sheetData = $objPHPExcel->getActiveSheet()->toArray();
    var_dump($sheetData);
     
     
    ?>
    Je ne comprends pas très bien ce que j'obtiens à a savoir ceci :

    array (size=8)
    0 =>
    array (size=8)
    0 => string 'a1' (length=2)
    1 => string 'b1' (length=2)
    2 => string 'c1' (length=2)
    3 => string 'd1' (length=2)
    4 => null
    5 => null
    6 => null
    7 => null
    1 =>
    array (size=8)
    0 => string 'a2' (length=2)
    1 => string 'b2' (length=2)
    2 => string 'c2' (length=2)
    3 => string 'd2' (length=2)
    4 => null
    5 => null
    Pourquoi ça m'affiche tout ce brol ?
    Pourquoi je n'ai pas juste ?
    a1
    b1
    c1
    d1
    a2
    b2
    c2
    d2
    etc...
    Ceci étant dit ce n'est que la base de mon souci parceque de veux pouvoir récupérer le contenu des différentes cellules pour m'en servir (et pas pour les afficher).
    Par m'en servir, j'entends dans du HTML dans le genre de ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    echo
      <<<HTML
    <p>
    <img src="{$ligne[1]}" align=left hspace=12>
    <span style='text-align: left; font-size: 24px; line-height:30px;'>{$ligne[2]}</span>
    </BR>
    <span style='text-align: left; font-size: 16px; line-height:22px;'>{$ligne[3]}</span>
    </BR>
    <span style='text-align: left; font-size: 14px; line-height:22px;'>Réservation : <a href="{$ligne[4]}" target="_blank">Site internet - </a> <a href="{$ligne[5]}">Par e-mail </a>                                                                                                   </span>
    </BR>
    <span style='text-align: left; font-size: 14px; line-height:22px;'>Numéro de téléphone : {$ligne[6]}</span>                                                                                                         </span>
    </BR>
    <span style='text-align: left; font-size: 14px; line-height:1px;'>------------------------------------------------------------------</p>
    HTML;
    Parceque mon but c'est, par exemple, d'afficher l'image dont le nom de fichier est dans la case A et pas d'afficher le nom de cette image.

    Quelqu'un saurait me donner des pistes ?

    Merci.

  3. #3
    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
    Pourquoi ça m'affiche tout ce brol ?
    Pourquoi je n'ai pas juste ?
    Parce que c'est ce que tu as demandé pardis.

    Il existe de multiples façon de parcourir la feuille avec PHPExcel, par exemple avec les iterator :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $worksheet=$objPHPExcel->getSheet(0);
    foreach ($worksheet->getRowIterator() as $row) {
    	$cellIterator = $row->getCellIterator();
    	foreach ($cellIterator as $cell) {
    		echo $cell->getCoordinate() . ' : ' . $cell->getCalculatedValue() . "<br/>";
    	}
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 016
    Points : 308
    Points
    308
    Par défaut
    Merci Sabotage pour ton aide précieuse.
    J'ai compris plein de choses et j'ai un peu modifié mon code pour faire ceci :

    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
    <?php
    /** Charger la bibliothèque **/ 
    set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
    include 'PHPExcel/IOFactory.php';
     
    /** définir le fichier à examiner*/ 
    $inputFileName = './sampleData/example1.xls';
     
    /** Cette ligneje ne comprends pas très bien mais bon...*/
    $objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
     
    /** ici je crois comprendre qu'on dit que c'est la feuille 1 du fichier excell en question */
    $worksheet=$objPHPExcel->getSheet(0);
     
    /** ici je ne comprends pas trop non plus*/
    foreach ($worksheet->getRowIterator() as $row) {
    	$cellIterator = $row->getCellIterator();
     
    /** maintenant on fait une boucle qui parcours les cellules l'une après l'autre*/	
    	foreach ($cellIterator as $cell) {
    		$valeur=$cell->getCalculatedValue() ; /** a chaque cellule on met la valeur de la cellule dans la variable valeur*/
    	echo $valeur. "<br/>"; /** on affiche le contenu de la variable avec un echo*/
    	}
    }
    ?>
    <body>
    </html>
    Comme tu le vois dans mes commentaires il y a une ou deux choses que je ne comprends pas tout à fait (même si j'entrevois ce que ça fait).

    Ce qui reste mon souci principal c'est que là on lit les cellule une à une.
    Moi je voudrais arriver à lire une ligne entière pour utiliser son contenu en une fois après un passage de la boucle.
    En gros chaque ligne constitue pour moi un ensemble de données à exploiter pour créer un affichage ensuite je trace une barre puis j'affiche le contenu des cellules de la ligne suivante.

    Voila un bout de code bien pourri et qui ne marche évidement pas mais c'est l'idée :

    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
    <?php
     
    error_reporting(E_ALL);
    set_time_limit(0);
     
    date_default_timezone_set('Europe/London');
     
    ?>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
     
    <title>PHPExcel Reader Example #01</title>
     
    </head>
    <body>
     
    <?php
    /** Charger la bibliothèque **/ 
    set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
    include 'PHPExcel/IOFactory.php';
     
    /** définir le fichier à examiner*/ 
    $inputFileName = './sampleData/example1.xls';
     
    /** Cette ligneje ne comprends pas très bien mais bon...*/
    $objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
     
    /** ici je crois comprendre qu'on dit que c'est la feuille 1 du fichier excell en question */
    $worksheet=$objPHPExcel->getSheet(0);
     
    /** ici je ne comprends pas trop non plus*/
    foreach ($worksheet->getRowIterator() as $row) {
    	$cellIterator = $row->getCellIterator();
     
    /** maintenant on fait une boucle qui parcours TOUTES les cellules d'une ligne l'une après l'autre et qui met ca dans des variables différentes*/	
    BOUCLE DE LIGNE
    	foreach ($cellIterator as $cell) {
    		$valeur[i]=$cell->getCalculatedValue() ; /** a chaque cellule on met la valeur de la cellule dans la variable valeur*/
     
    	}
    	echo
      <<<HTML
    <p>
    <img src="{$valeur[1]}" align=left hspace=12>
    <span style='text-align: left; font-size: 24px; line-height:30px;'>{$valeur[2]}</span>
    </BR>
    <span style='text-align: left; font-size: 16px; line-height:22px;'>{$valeur[3]}</span>
    </BR>
    <span style='text-align: left; font-size: 14px; line-height:22px;'>Réservation : <a href="{$valeur[4]}" target="_blank">Site internet - </a> <a href="{$valeur[5]}">Par e-mail </a>                                                                                                   </span>
    </BR>
    <span style='text-align: left; font-size: 14px; line-height:22px;'>Numéro de téléphone : {$valeur[6]}</span>                                                                                                         </span>
    </BR>
    <span style='text-align: left; font-size: 14px; line-height:1px;'>------------------------------------------------------------------</p>
    HTML;
     
    RETOUR A BOUCLE DE LIGNE jusqu à ce que toutes les lignes aient été lues
    La boucle qui lit toutes les cellules d'une ligne pourrait être fixe puisque j'ai toujours le même nombre de cellules dans une ligne (6).
    Par contre la boucle qui lit toutes les lignes elle, elle doit allez jusqu'au bout.
    Donc en fait (je crois que) mon problème est un problème d'imbrication de deux boucles.
    Je dois avoir une boucle qui lit ligne par ligne.
    Dans cette boucle je dois avoir une autre boucle qui lit toutes les cellules de la ligne encours.
    A la fin de la boucle 2, je dois afficher le résultat de toutes les cellules de la ligne en cours qui a été lue.
    Ensuite je reviens à la boucle 1 pour passer à la ligne suivante et ainsi de suite jusqu'a ce que toutes les lignes aient été lues.

    Est ce que tu me comprends et est ce que je suis sur la bonne voie ?

    Grace à ton code j'ai +/- compris comment les cellules sont lues mais je ne vois pas comment faire une boucle qui ferait qu'une ligne soit lue en entier avant de passer à la suivante.

    Sais tu m'aider sur ce coup là... si tu arrives a comprendre ce qui ressemble aux délires d'un enfant de 4 ans qui découvre la trigonométrie...

    Quoi qu'il en soit déjà merci pour ton aide, j'avance :-)

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

Discussions similaires

  1. Réponses: 55
    Dernier message: 16/11/2008, 17h32
  2. [CSV] Ne lire que la premiere ligne d'un fichier CSV
    Par passie dans le forum Langage
    Réponses: 7
    Dernier message: 05/07/2006, 12h02
  3. Réponses: 12
    Dernier message: 12/04/2006, 10h20
  4. [CSV] Ecrire et Lire un fichier Excel depuis PHP
    Par cocaetjusdorange dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2006, 11h10
  5. Lire un fichier CSV/XLS
    Par Doneve dans le forum ASP
    Réponses: 3
    Dernier message: 04/10/2005, 17h34

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