Я встретился со странной проблемой, устанавливающей пользовательский формат даты с PHPExcel: я пишу sql отформатированную дату в ячейку и устанавливаю, это - формат с setFormatCode к 'd/m/y'. Когда я открываю его в Excel 2007, это показывает исходный формат даты, пока я не дважды щелкаю по ячейке, и затем это обновляется к моему нужному формату. Существует ли способ иметь его обновляющий себя без меня помощь?
$sheet->setCellValueByColumnAndRow($column, $row, '2010-07-16');
$sheet->getStyleByColumnAndRow($column, $row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYSLASH);
Если вы не используете «Расширенное связывание значений» PHPExcel, тогда $ 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 () библиотеки функций Calculation Engines:
$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 «Advanced Value Binder»
. Чтобы включить эту функцию, выполните следующий статический вызов
PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_AdvancedValueBinder() );
перед созданием экземпляра вашего объект рабочей книги или загрузите его из файла
. Затем PHPExcel определит, что ваше значение является датой, обработает преобразование в метку даты / времени Excel и автоматически отформатирует ее
$dateString = '2010-07-16';
$sheet->setCellValueByColumnAndRow($column, $row, $dateString);