Мне нужно сохранить дату в файл Excel, она должна быть выведена в формате «дд / мм / гггг» (или локальный формат даты пользователя), и должна рассматриваться как дата, чтобы столбец из них можно было правильно отсортировать ,
Вот код:
<?php
include_once("../PHPExcel/Classes/PHPExcel.php");
date_default_timezone_set('Europe/London');
$objPHPExcel = new PHPExcel();
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;
PHPExcel_Settings::setCacheStorageMethod($cacheMethod);
$objPHPExcel = new PHPExcel();
$sheet = $objPHPExcel->getActiveSheet();
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);
//I didn't find dd/mm/yyyy format, so I used yyyy-mm-dd
$sheet->setCellValueByColumnAndRow(0, 1, "2014-10-16");
$sheet->getStyleByColumnAndRow(0, 1)
->getNumberFormat()->setFormatCode(
PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2
);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save("test.xlsx");
Он создает файл, но вместо моего локального формата даты я вижу: «2014-10-16», а формат ячейки — «Все форматы» -> «гггг-мм-дд». Я хотел, чтобы это было проанализировано и выведено в моем местном формате даты.
Я посмотрел в исходный код PHPExcel/Classes/PHPExcel/Style/NumberFormat.php
и нашел много форматов даты:
const FORMAT_DATE_YYYYMMDD2 = 'yyyy-mm-dd';
const FORMAT_DATE_YYYYMMDD = 'yy-mm-dd';
const FORMAT_DATE_DDMMYYYY = 'dd/mm/yy';
const FORMAT_DATE_DMYSLASH = 'd/m/y';
const FORMAT_DATE_DMYMINUS = 'd-m-y';
...
Но я не уверен, что использовать. Как я могу достичь желаемой цели?
$sheet->setCellValueByColumnAndRow(0, 1, "2014-10-16");
Устанавливает строка значение в ячейке, а не дата. То, что вы интерпретируете это как дату, не означает, что компьютерные программы автоматически интерпретируют это как дату.
Посмотрите на примеры примеров в PHPExcel Документация а также Примеры, и вы увидите, что вам нужно установить значение ячейки в сериализованную временную метку MS Excel (число с плавающей точкой количества дней с 1 января 1900 года). Вы можете использовать функции PHPExcel, такие как PHPExcel_Shared_Date::PHPToExcel()
для преобразования дат человека / объектов PHP DateTime / меток времени Unix в сериализованные метки времени MS Excel.
$sheet->setCellValueByColumnAndRow(0, 1, PHPExcel_Shared_Date::PHPToExcel( '2014-10-16' ));
После того как вы сохранили значение в виде временной метки, вы можете применить любую маску формата даты, которую вы хотите, к этой ячейке, чтобы получить желаемое форматирование
Этот код генерирует 4 ячейки в формате даты.
<?php
include_once("../PHPExcel/Classes/PHPExcel.php");
date_default_timezone_set('Europe/London');
$objPHPExcel = new PHPExcel();
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;
PHPExcel_Settings::setCacheStorageMethod($cacheMethod);
$objPHPExcel = new PHPExcel();
$sheet = $objPHPExcel->getActiveSheet();
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);
$format = 'dd/mm/yyyy';
for ($i = 1; $i < 5; ++$i)
{
$date = new DateTime('2016-12-0'.$i);
$sheet->setCellValueByColumnAndRow(0, $i,
PHPExcel_Shared_Date::PHPToExcel( $date ));
$sheet->getStyleByColumnAndRow(0, $i)
->getNumberFormat()->setFormatCode($format);
}
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save("test.xlsx");