Если вы не используете PHPExcel "Advanced Value Binder", тогда $ sheet-> setCellValueByColumnAndRow ($ column, $ row, '2010-07-16');будет сохранять значение как строку, а не как дату, поэтому формат даты, который вы устанавливаете в следующей строке, не имеет смысла, когда применяется к строке, пока вы не прочитаете результирующий файл в Excel и не выполните принудительное обновление ... Сам Excelзатем исправляет вашу ошибку.
Чтобы обеспечить правильное сохранение значения в первую очередь, вам нужно сохранить его как дату / время / число, а не строку, а затем установить маску формата, чтобы убедиться, что онообрабатывается как дата / время, а не как числовое значение.
Либо преобразуйте вашу строку в дату PHP с помощью strtotime (), затем используйте встроенные методы преобразования даты в 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);
или используйте встроенный метод для преобразования строки в формате даты в значение даты / времени Excel напрямую
$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);
или используйте функцию DATEVALUE () библиотеки функций модулей расчета:
$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);
или, вариант 4, заключается в использовании расширенного связующего значения в PHPExcel
Чтобы включить эту функцию, выполните следующий статический вызов
PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_AdvancedValueBinder() );
beпрежде чем создавать экземпляр объекта рабочей книги или загружать его из файла
, тогда PHPExcel определит, что ваше значение является датой, и обработает преобразование в дату / время в Excel и автоматически отформатирует
$dateString = '2010-07-16';
$sheet->setCellValueByColumnAndRow($column, $row, $dateString);