格式化PHPExcel中的日期,可以在生成XLS后更新

时间:2015-01-14 06:28:29

标签: php phpexcel

我尝试使用PHPExcel输出日期,其中格式可以在生成文件后更改。

例如,我输出日期,如下所示:

23/04/1989

然后我可以格式化单元格,更改格式并显示如下内容:

1989年4月23日

我尝试过这种方法(使用下面的代码)并生成了一个文件。当我点击日期单元格并尝试对其进行格式化时,它似乎已经有效,因为它具有“日期”功能。类别突出显示并且正确的类型'。

但是,如果我更改格式并单击“确定”,则单元格不会更改格式。

这是我的代码:

$objPHPExcel->getActiveSheet()->setCellValueExplicit('A1', '23/04/1989');
$objPHPExcel->getActiveSheet()->getStyle('A1')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);

这是Excel中的限制还是我没有以正确的方式解决这个问题?

1 个答案:

答案 0 :(得分:5)

您需要将日期转换为Excel序列化日期/时间戳,并将其存储在单元格中

$dateValue = PHPExcel_Shared_Date::PHPToExcel( strtotime('23-Apr-1989') );
$objPHPExcel->getActiveSheet()
    ->setCellValue('A1', $dateValue);
$objPHPExcel->getActiveSheet()
    ->getStyle('A1')
    ->getNumberFormat()
    ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);

请注意PHPExcel_Shared_Date::PHPToExcel()接受unix时间戳或DateTime对象

$dateValue = PHPExcel_Shared_Date::PHPToExcel( 
    DateTime::createFromFormat('d/m/Y', '23/04/1989') 
);
$objPHPExcel->getActiveSheet()
    ->setCellValue('A1', $dateValue);
$objPHPExcel->getActiveSheet()
    ->getStyle('A1')
    ->getNumberFormat()
    ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);

由于您23/04/1989的日期被PHP视为m/d/Y(因此不是您所期望的 - 请参阅PHP的accepted format rules),DateTime::createFromFormat()允许您指定它是d/m/Y