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

标签 php phpexcel

我尝试使用 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/

相关文章:

php - Swiftmailer 目的地 mysql

php - 使用 Netbeans 部署缩小版本的 JS/CSS

php - 有没有办法使用 PHPExcel 检测 excel 文件是在 windows 还是 mac 上生成的?

PHPExcel插入数组公式

php - 通过 PHPExcel、Codeigniter 和 Ajax 导出到 Excel

php - 从 SQL DB 添加和/或删除记录

javascript - 如果 json 值与条件匹配,则显示单选按钮已选中

php - 如果当前输入中没有则删除表条目

phpexcel允许的内存大小为134217728字节已用完

PhpExcel 错误 - 在 Excel 中打开时无法读取内容