人。我在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中的值在值之前为'
。
它出现的原因以及如何解决?
答案 0 :(得分:3)
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);
02types.php中的`/Examples` folder示例脚本演示了此
修改强>
您可以(并且效率更高)将样式应用于一系列单元格:只需在getStyle()
调用中指定范围。
$objPHPExcel->getActiveSheet()
->getStyle('C11:C200')
->getNumberFormat()
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2);
要获取可用格式的详细信息:PHPExcel内置了许多预定义格式,并且可以在Classes/PHPExcel/Style/NumberFormat.php中找到这些格式的常量。但是,您不仅限于这组格式;并且(与MS Excel允许您定义“自定义”格式的方式相同)您可以使用几乎任何rules that can be used for MS Excel number format masks作为格式传递定义格式的字符串(例如“d-mmm-yyyy”)