我尝试使用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中的限制还是我没有以正确的方式解决这个问题?
答案 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