我尝试使用 PHPExcel 输出日期生成文件后可以更改格式。
例如,我输出日期,如下所示:
1989年4月23日
然后我可以格式化单元格,更改格式,它会显示如下内容:
1989 年 4 月 23 日
我已经尝试过这种方法(使用下面的代码)并生成了一个文件。当我单击日期单元格并尝试对其进行格式化时,它似乎有效,因为它突出显示了“日期”类别和正确的“类型”。
但是,如果我更改格式并单击“确定”,单元格不会更改其格式。
这是我的代码:
$objPHPExcel->getActiveSheet()->setCellValueExplicit('A1', '23/04/1989');
$objPHPExcel->getActiveSheet()->getStyle('A1')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);
这是 Excel 中的限制还是我没有以正确的方式处理此问题?
最佳答案
您需要将日期转换为 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);
由于 PHP 会将您的日期 23/04/1989
视为 m/d/Y
(因此不是您所期望的 - 请参阅 PHP 的accepted format rules ) 使用 DateTime::createFromFormat()
允许您指定它是 d/m/Y
关于php - 在 PHPExcel 中格式化日期,可以在生成 XLS 后更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27937003/