如何用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'; }