PHP Excel, lecture d'une date
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
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)
Ok merci !
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 !