除非你使用PHPExcel的 “先进文化价值活页夹”,然后$片状> setCellValueByColumnAndRow($列,$行, '2010-07-16');会将该值存储为字符串,而不是日期,因此,在应用于字符串时,您在下一行中设置的日期格式是无意义的,直到您在Excel中读取结果文件并强制刷新为止... Excel本身然后修复你的错误。
为确保值正确存储在第一位,您需要将其存储为日期/时间戳/数字而不是字符串,然后设置格式掩码以确保它被视为日期/时间戳而不是一个数字值。
或者使用的strtotime(),然后用你的字符串转换为PHP日期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 datetime值直接
$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);
这是一个很好的答案。谢谢! – ISBL 2010-07-18 06:47:19
如果由PHPExcel创建者之一自己回答它不会出错 – 2017-07-22 17:06:49