Пользовательский формат ячеек PHPExcel, только показанный после, дважды щелкает

Я встретился со странной проблемой, устанавливающей пользовательский формат даты с 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);
6
задан pnuts 4 September 2015 в 03:36
поделиться

1 ответ

Если вы не используете «Расширенное связывание значений» 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); 
15
ответ дан 8 December 2019 в 14:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: