comment obtenir la date d'excel en utilisant la bibliothèque PHPExcel

j'essaie d'obtenir la Date d'excel en utilisant PHPExcel. Mais je n'obtiens pas date, je reçois valeur chaîne qui n'est pas secondes de 1970 .

le Code que j'ai essayé est

$InvDate=trim($excel->getActiveSheet()->getCell('B' . $i)->getValue());
26
demandé sur BKM 2013-10-30 09:37:35

4 réponses

Essayez d'utiliser

$cell = $excel->getActiveSheet()->getCell('B' . $i);
$InvDate= $cell->getValue();
if(PHPExcel_Shared_Date::isDateTime($cell)) {
     $InvDate = date($format, PHPExcel_Shared_Date::ExcelToPHP($InvDate)); 
}

P. S.

@DiegoDD: devrait mentionner que $format est le format désiré pour la date. par exemple:

 $InvDate = date($format = "Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($InvDate)); 
54
répondu Sergey 2015-11-05 06:03:19

pour une date, getValue () doit retourner un float, qui est la valeur de l'horodatage en série Excel pour cette date/heure... Je pense que c'est votre trim() qui le lance à string. La valeur réelle est le nombre de jours depuis le 1/1/1900 (ou 1/1/1904 selon le calendrier que le tableur utilise).

appeler getFormattedValue () ou getCalculatedValue() au lieu de getValue() devrait renvoyer la date formatée sous forme de chaîne lisible par l'homme selon le masque de numéroformat du cellule.

alternativement, la solution de Sergey teste si la cellule a une date/heure numéroformatmask et appelle la méthode d'aide appropriée pour convertir ce serialized timestamp Excel en un unix timestamp, puis utilise la fonction de date PHP normale pour le formater comme humaine lisible selon la valeur de $format. Il y a une méthode d'aide similaire PHPExcel_Shared_Date::ExcelToPHPObject() qui convertira un timestamp en série Excel en un objet PHP DateTime

11
répondu Mark Baker 2013-10-30 08:10:26

Dans la nouvelle version de la bibliothèque, PhpOffice, la fonction qui gère ce est excelToDateTimeObject ainsi le nouveau format de code devrait être:

$cell = $excel->getActiveSheet()->getCell('B' . $i);
$InvDate= $cell->getValue();
if (PhpOffice\PhpSpreadsheet\Shared\Date::isDateTime($cell)) {
     $InvDate = PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($InvDate); 
}
1
répondu Gabriel Lupu 2017-07-13 01:52:11

Vous pouvez obtenir les valeurs des cellules sous forme de chaîne (aussi les valeurs de date) de cette façon:

$sheet = $objPHPExcel->getActiveSheet();
$lastRow = $sheet->getHighestRow();
$lastColumn = $sheet->getHighestColumn();

$rows = $sheet->rangetoArray('A2:'.$lastColumn . $lastRow, NULL, True, True, False);
foreach ($rows as $row => $cols) {
    foreach($cols as $col => $cell) {
        echo trim($cell).'<br>'; // Gives the value as string
    }
}
0
répondu shasi kanth 2018-04-11 08:34:18