除非您使用 PHPExcel 的“高级值绑定器”,否则$sheet->setCellValueByColumnAndRow($column, $row, '2010-07-16');
会将值存储为字符串,而不是日期,因此您在下一行中设置的日期格式在应用于字符串之前是没有意义的,直到您阅读在 Excel 中生成文件并强制刷新... Excel 本身会修复您的错误。
为确保首先正确存储该值,您需要将其存储为日期/时间戳/数字而不是字符串,然后设置格式掩码以确保将其视为日期/时间戳而不是数字价值。
使用 将您的字符串转换为 PHP 日期strtotime()
,然后使用 PHPExcel 的内置日期转换方法:
$PHPDateValue = strtotime('2010-07-16');
$ExcelDateValue = PHPExcel_Shared_Date::PHPToExcel($PHPDateValue);
$sheet->setCellValueByColumnAndRow($column, $row, $ExcelDateValue);
$sheet->getStyleByColumnAndRow($column, $row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYSLASH);
或使用内置方法将日期格式的字符串直接转换为 Excel 日期时间值
$dateString = '2010-07-16';
$ExcelDateValue = PHPExcel_Shared_Date::stringToExcel($dateString);
$sheet->setCellValueByColumnAndRow($column, $row, $ExcelDateValue);
$sheet->getStyleByColumnAndRow($column, $row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYSLASH);
或使用计算引擎函数库的DATEVALUE()
函数:
$dateString = '2010-07-16';
$ExcelDateValue = PHPExcel_Calculation_Functions::DATEVALUE($dateString);
$sheet->setCellValueByColumnAndRow($column, $row, $ExcelDateValue);
$sheet->getStyleByColumnAndRow($column, $row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYSLASH);
或者,选项 4,是使用 PHPExcel 的“高级值绑定器”
要启用此功能,请执行以下静态调用
PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_AdvancedValueBinder() );
在您实例化您的工作簿对象之前,或从文件中加载它
然后 PHPExcel 将识别您的值是日期,并处理转换为 Excel 日期/时间戳并自动格式化
$dateString = '2010-07-16';
$sheet->setCellValueByColumnAndRow($column, $row, $dateString);