如何用ExcelBundle读取date

我在尝试使用$cell->getCalculatedValue()读取DateTime单元格的单元格值时出现问题。

excel文件的值是28/2/15 (格式d / m / y),但我得到42063

这是格式问题吗? 如果是这样,我该如何解决呢?

MS Exceldate/时间值是一个浮点数,不是一个格式化的string,或任何其他特殊的数据types; 它只是数字格式掩码,它们与其他任何浮点数不同

getCalculatedValue()将处理任何公式,但不会应用任何格式,所以您只需获取浮点值

然而

getFormattedValue()将计算单元格的任何公式,但也可以应用任何数字格式化掩码,因此“date”将作为格式化string返回,取决于该单元格的数字格式掩码

编辑

返回的格式化string取决于使用的数字格式掩码….不幸的是一些MS Exceldate格式掩码是语言环境感知,但PHPExcel不是,所以如果单元格使用这些掩码之一,那么结果可能不会格式化为您我想要。

您可以使用您select的格式掩码为单元格值应用手动格式:

 $result = PHPExcel_Style_NumberFormat::toFormattedString( $cell->getCalculatedValue(), PHPExcel_Style_NumberFormat::FORMAT_DATE_DDMMYYYY ); 

要么

 $result = PHPExcel_Style_NumberFormat::toFormattedString( $cell->getCalculatedValue(), 'dd/mm/yy' ); 

或者,您可以使用MS Excel的序列化时间戳转换为unix时间戳

 $result = PHPExcel_Shared_Date::ExcelToPHP( $cell->getCalculatedValue() ); 

或PHP DateTime对象

 $result = PHPExcel_Shared_Date::ExcelToPHPObject( $cell->getCalculatedValue() ); 

然后使用正常的PHP date()DateTime::format()掩码来格式化,但是你想要的

编辑#2

确定一个单元格是否包含date:

 if (PHPExcel_Shared_Date::isDateTime($cell)) { echo 'Cell ', $cell->getCoordinate(), ' contains a date value'; }