PHPExcel: как установить формат даты для ячейки

Мне нужно сохранить дату в файл 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';
...

Но я не уверен, что использовать. Как я могу достичь желаемой цели?

4

Решение

$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' ));

После того как вы сохранили значение в виде временной метки, вы можете применить любую маску формата даты, которую вы хотите, к этой ячейке, чтобы получить желаемое форматирование

5

Другие решения

Этот код генерирует 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");
4

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector