PHP Excel, lecture d'une date

Rechercher

PHP Excel, lecture d'une date

Par Lutin1801  -  3 reponses  -  Le 18/05/2012 15:36  -  Editer  - 

Bonjour a tous, Je voudrais lire une date contenu dans un fichier Excel avec du code PHP, pour cela j'utilise la librairie PHPExcel mais voyez vous, j'arrive a lire tous les cases comme il faut, suf les cases contenant des dates. En effet, les dates telles que '16/05/2004' sont retranscrites sous cette forme '38123', que dois je faire pour les avoir dans le bon format ?

<?php   // Code de lecture d'un fichier excel a plusieur colonnes et lignes
       require_once './PHPExcel/Classes/PHPExcel/IOFactory.php';
       // Chargement du fichier Excel
       $objPHPExcel = PHPExcel_IOFactory::load("TestDate.xls");
       /**
       * récupération de la première feuille du fichier Excel
       * @var PHPExcel_Worksheet $sheet
       */
       $sheet = $objPHPExcel->getSheet(0);
       // Afficher la ligne 1, trouver les colonnes qui nous intéressent
       $ligne = 0;
       $cpt = 0;
       // On boucle sur les lignes
       foreach($sheet->getRowIterator() as $row) {
          // On boucle sur les cellule de la ligne 1
          foreach ($row->getCellIterator() as $cell) {
             if ($ligne == 0){
                $var = $cell->getValue();
                if ($var == 'Code materiel'){         $tab['n26E'] = $cpt;   }
                if ($var == 'Date Livraison'){         $tab['dLivr'] = $cpt;   }
                $cpt++;
             }
          }
          $ligne++;
       }
       // Afficher juste les colonnes que l'on veut !
       echo '<table border="1">';
       $ligne = 0;
       $cpt = 0;
       // On boucle sur les lignes
       foreach($sheet->getRowIterator() as $row) {
          echo '<tr>';
          $cpt_c =0;
          // On boucle sur les cellule de la ligne
          foreach ($row->getCellIterator() as $cell) {
             echo '<td>';
             if ($cpt_c == 32){
                print_r($cell->getValue());
                $tab[$ligne]['n26E'] = $cell->getValue();
             }
             if ($cpt_c == 49){
                print_r($cell->getValue());
                $tab[$ligne]['dLivrais'] = $cell->getValue();
             }
             echo '</td>';
             $cpt++;
             $cpt_c++;
          }
          echo '</tr>';
          $ligne++;
       }
       echo '</table>';
    ?>
 

Réponses apportées à cette discussion

Par Cyrano  -  Le 18/05/2012 16:32  -  Haut de page  - 

Salut,

je ne connais pas en détails PHPExcel, mais vérifie si ton objet $cell ne dispose pas d'une méthode publique destinée spécifiquement à la récupération des dates. Autrement, il faudrait savoir à quoi correspond la conversion qui a été faite, et là je ne vois pas trop ce que c'est au juste, peut-être un nombre de jour à partir de epoch (01/01/1970)

 
Par Lutin1801  -  Le 21/05/2012 09:17  -  Haut de page  - 

Ok merci !

 
Par Lutin1801  -  Le 24/05/2012 16:10  -  Haut de page  - 

Bon alors j'ai trouvé toute seule, pour ceux que ca interesse :

j'ai donc mis la date dans la variable $date = $tab[$ligne]['dLivrais'] (ligne 56)

alors excel renvois un nombre de jour écoulé depuis 1900 et la fonction mktime de php prend en parametre int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )

ie mktime (heure, minute, seconde, mois, jour, annee)

donc 0 heure, 0 minute, 0 seconde, 1 mois (car on commence au premier mois janvier), $date-1 (c'est notre nombre de jour renvoyer par excel, -1 car excel commence a un et php à 0), 1900 (car c'est l'année a partir de la quelle on veut qu'il compte) => mktime(0,0,0,1, $date-1, 1990)

on obtient le nombre de jour écoulé depuis 1900 mais au format php

pour mettre notre date sous une forme agréable on utilise la fonction date string date ( string $format [, int $timestamp = time() ] )

ie date(un formatde date, un nombre de jour écoulé)

donc date("d/m/y", mktime(0,0,0,1, $date-1, 1990));

et voila il n'y a plus qu'a afficher !

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |