PHPExcel将stringdate放入.xls

家伙。 我把DB的date定义为string“d / m / Y”。 当我把这个date放到Excel中时,它显示了像03/10/2000那样的正常date,但是当我点击这个单元格时,它显示出值'03/10/2000 。 所以,值是string,而不是我所需要的date。

所以,我把数据库中的date转换成了一个PHPdate对象,并确保var_dumpdate是带有该代码的Date对象:

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

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

为什么会出现,我该如何解决?

MS Excel将date存储为序列化时间戳,自1900年1月1日以来的天数(或使用Mac日历的1904年1月1日)。 要将值存储为date(而不是简单地作为string),则需要将stringdate转换为序列化的时间戳,然后设置单元格的格式掩码。

 $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中find这些格式的常量。 不过,你并不局限于这一套格式。 和(和MS Excel可以让你定义“自定义”格式的方式一样),你可以简单地使用定义格式的string(例如“d-mmm-yyyy”)来使用几乎所有可以用于MS Excel的规则数字格式掩码作为格式