À moins que vous utilisez "Advanced Value Binder" de PHPExcel, puis $ feuillet-> setCellValueByColumnAndRow (colonne $, $ row, '2010-07-16'); stockera la valeur sous la forme d'une chaîne, pas comme une date, donc le format de date que vous définissez dans la ligne suivante est inutile lorsqu'il est appliqué à une chaîne jusqu'à ce que vous lisiez le fichier résultant dans Excel et forcer un rafraîchissement ... Excel lui-même puis corrige votre erreur. Pour garantir que la valeur est correctement stockée en premier lieu, vous devez la stocker en tant que date/horodatage/numéro plutôt qu'une chaîne, puis définir le masque de format pour s'assurer qu'il est traité comme date/horodatage plutôt qu'une valeur numérique.
Soit convertir votre chaîne à une date de PHP en utilisant strtotime(), puis utilisez les méthodes intégrées de conversion date de PHPExcel:
$PHPDateValue = strtotime('2010-07-16');
$ExcelDateValue = PHPExcel_Shared_Date::PHPToExcel($PHPDateValue);
$sheet->setCellValueByColumnAndRow($column, $row, $ExcelDateValue);
$sheet->getStyleByColumnAndRow($column, $row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYSLASH);
ou utiliser la méthode intégrée pour convertir une chaîne de date formatée dans un fichier Excel valeur datetime directement
$dateString = '2010-07-16';
$ExcelDateValue = PHPExcel_Shared_Date::stringToExcel($dateString);
$sheet->setCellValueByColumnAndRow($column, $row, $ExcelDateValue);
$sheet->getStyleByColumnAndRow($column, $row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYSLASH);
ou utiliser la fonction DATEVALUE() de la bibliothèque de fonctions de calcul des moteurs:
$dateString = '2010-07-16';
$ExcelDateValue = PHPExcel_Calculation_Functions::DATEVALUE($dateString);
$sheet->setCellValueByColumnAndRow($column, $row, $ExcelDateValue);
$sheet->getStyleByColumnAndRow($column, $row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYSLASH);
ou, option 4, est d'utiliser « Advanced Value Binder » de PHPExcel
Pour activer cette fonction, exécuter l'appel statique suivant
PHPExcel_Cell::setValueBinder(new PHPExcel_Cell_AdvancedValueBinder());
avant instanciez votre objet classeur ou le charger à partir du fichier
Alors PHPExcel identifierons que votre valeur est une date, et gérer la conversion à une date Excel/horodatage et le format automatiquement
$dateString = '2010-07-16';
$sheet->setCellValueByColumnAndRow($column, $row, $dateString);
Voilà une excellente réponse. Je vous remercie! – ISBL
Il ne peut pas se tromper si l'un des créateurs de PHPExcel lui répond –