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_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);

02types.php example script in the `/Examples` folder 证明了这一点

编辑

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

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

要获取可用格式的详细信息:PHPExcel 有许多内置的预定义格式,这些可以在 Classes/PHPExcel/Style/NumberFormat.php. However, you're not limited to that set of formats; and (in the same way that MS Excel lets you define "custom" formats) you can simply pass a string defining the format (e.g. "d-mmm-yyyy") using pretty much any of the rules that can be used for MS Excel number format masks 中作为常量找到,作为格式