繁体   English   中英

PHPExcel将字符串日期放入.xls

[英]PHPExcel putting string date into .xls

家伙。 我在DB的日期为字符串“d / m / Y”。 当我把这个日期放到Excel中时,它会显示正常日期,如03/10/2000,但是当我点击单元格时,它会显示值'03/10/2000 所以,值是字符串,而不是我所需的日期。

所以,我将日期从DB转换为PHP日期对象,并确保var_dump日期是具有该代码的Date对象:

$date = date_create_from_format('d/m/Y', $array[$i-20]['Date']);
              $date->format('m/d/Y');

但无论如何,生成的.xls中的值都是'之前的值。

它出现的原因以及如何解决?

MS Excel将日期存储为序列化时间戳,即自1900年1月1日(或1904年1月1日,如果使用Mac日历)以来的天数。 要将值存储为日期(而不仅仅是字符串),您需要将字符串日期转换为序列化时间戳,然后设置单元格的格式掩码。

$date = date_create_from_format('d/m/Y', $array[$i-20]['Date']);
$excelDate = PHPExcel_Shared_Date::PHPToExcel($date);

将$ excelDate设置为单元格值

$objPHPExcel->getActiveSheet()->setCellValue('C11', $excelDate );

然后将格式掩码应用于该单元格

$objPHPExcel->getActiveSheet()
    ->getStyle('C11')
    ->getNumberFormat()
    ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2);

`/ Examples`文件夹中02types.php示例脚本演示了这一点

编辑

您可以(并且更有效)将样式应用于一系列单元格:只需在getStyle()调用中指定范围即可。

$objPHPExcel->getActiveSheet()
    ->getStyle('C11:C200')
    ->getNumberFormat()
    ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2);

要获取可用格式的详细信息:PHPExcel内置了许多预定义的格式,这些格式可以在Classes / PHPExcel / Style / NumberFormat.php中找到 但是,您不仅限于这组格式; 并且(与MS Excel允许您定义“自定义”格式的方式相同)您可以使用几乎任何可用于MS Excel规则来传递定义格式的字符串(例如“d-mmm-yyyy”) 数字格式掩码作为格式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM