使用PHPExcel为单元格设置正确的读取格式

时间:2013-04-24 09:06:06

标签: php phpexcel

我正在使用PHPExcel来阅读Excel 2007文档。在本文档中,有一个“时间”格式的列,它在Excel中正确显示数据。当我尝试解析这个列时,我得到了一些奇怪的值。知道如何解决这个问题?

谢谢。

3 个答案:

答案 0 :(得分:9)

解析时,需要指定列的格式。 e.g。

$my_cell = $objWorksheet->getCellByColumnAndRow(1, 1);
$my_cell_value = PHPExcel_Style_NumberFormat::toFormattedString($cell->getCalculatedValue(), 'hh:mm:ss');
print $my_cell_value;

答案 1 :(得分:2)

奇怪的价值观?!?你的意思是你得到一个数字而不是一个人类可读的日期字符串....它总是有助于在可能的情况下准确地描述事物,而奇怪的不是一个真正准确的描述。

如果您只是从单元格中获取值,您将读取 原始 时间戳值(MS Excel将日期和时间值保存为时间戳;就像PHP中的Unix时间戳值,但Excel的时间戳是自1900年1月1日(或1904年1月1日,取决于它配置使用的日历)以来的天数。

MS Excel使用数字格式屏蔽将此时间戳显示为人类可读的日期/时间字符串。

您可以使用getFormattedValue()方法而不是简单的getValue()将其作为格式化的日期/时间进行检索(getFormattedValue()将单元格的任何数字格式掩码应用于值)。 如果您已将readDataOnly设置为TRUE加载文件,则不会加载数字格式掩码,因此PHPExcel无法识别单元格是否包含日期。

或者,正如James在他的回答中建议的那样,您可以通过使用自己的格式掩码应用数字格式来手动将原始时间戳转换为格式化值。

第三种方法是,您可以使用PHPExcxel的内置日期处理函数将此Excel时间戳值转换为PHP / unix时间戳或PHP DateTime对象(PHPExcel_Shared_Date :: ExcelToPHP()和PHPExcel_Shared_Date :: ExcelToPHPObject()分别), 然后,您可以使用PHP自己的日期处理函数显示

答案 2 :(得分:2)

存储在Excel中的时间值实际上是一天中的一小部分,因此0.2是24小时(或1440分钟或86400秒)乘以0.2。您可以根据该信息计算一天中的时间,然后从一天开始计算。它使它比格式化的时间更有用,但可读性更低。