我在列L中使用带有单元格格式的Excel模板作为" custom" - > DDMMYYYY
从php页面我调用PHPExcel对象并填写如下:
$objPHPExcel->setActiveSheetIndex(0)
->setCellValueExplicit('L'.$i, $birthdate, PHPExcel_Cell_DataType::TYPE_STRING);
(在一个循环中,但这对问题并不重要)。
值$ birthdate包含带破折号的日期。而这正是我想要的......几乎...... =>
当单元格已写入并打开excel文件时,我看到所有日期都是
以这种格式显示:dd-mm-yyyy
但是,该文件中列L中每个单元格的单元格格式仍然是定制的#34; - > DDMMYYYY
所以我希望细胞显示为ddmmyyyy ...
为什么它仍然显示破折号虽然cellformat是ddmmyyyy?
此外......当我点击值栏中的日期后面(fx后面的那个字段),然后按ENTER,然后突然,单元格显示日期为ddmmyyyy ......登记/> 为什么不打开文件?以及如何解决?
答案 0 :(得分:1)
因为您没有将日期存储为Excel DateTime标记,而是存储为字符串。
要在MS Excel中存储日期,您需要存储序列化的时间戳值,如示例所示
如/Examples/02types.php
$dateTimeNow = time();
$objPHPExcel->getActiveSheet()
->setCellValue('C9', PHPExcel_Shared_Date::PHPToExcel($dateTimeNow));
PHPExcel_Shared_Date::PHPToExcel()
将转换unix时间戳,PHP DateTime对象或strtotime()
可以处理的大多数字符串格式化日期值到MS Excel序列化时间戳
修改强>
您可能需要对ddmmyyyy
格式进行一些操作,使其格式易于转换为DateTime对象:
$dateTimeValue = DateTime::createFromFormat('dMY', '18082015', new DateTimeZone('UTC'));
$objPHPExcel->getActiveSheet()
->setCellValue('C9', PHPExcel_Shared_Date::PHPToExcel($dateTimeValue));
答案 1 :(得分:0)
意外地找到了解决方案......将日期设置为00:00:00 UTC =>
$date = DateTime::createFromFormat('d-m-Y', $birthdate);
$birthdate = $date->format('d-m-Y')." 00:00:00";
date_default_timezone_set("UTC");
$timestamp = strtotime($birthdate);
$dateValue = $timestamp;
$objPHPExcel->getActiveSheet(0)
->setCellValue('L'.$i, PHPExcel_Shared_Date::PHPToExcel($dateValue));