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

使用PHPExcel为单元格设置正确的读取格式,php,phpexcel,Php,Phpexcel,我正在使用PHPExcel阅读Excel 2007文档。本文档中有一列带有“时间”格式,它在Excel中正确显示数据。当我试图解析这个列时,我得到了一些奇怪的值。你知道我该怎么解决这个问题吗 谢谢。解析时,需要指定列的格式。e、 g $my_cell = $objWorksheet->getCellByColumnAndRow(1, 1); $my_cell_value = PHPExcel_Style_NumberFormat::toFormattedString($cell->g

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


谢谢。

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

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

奇怪的价值观?!?你的意思是你得到的是一个数字而不是一个可读的日期字符串。。。。尽可能准确地描述事物总是有帮助的,而“怪异”并不是一个真正准确的描述

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

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

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

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

第三种选择是,您可以使用PHPExcel的内置日期处理函数将此Excel时间戳值转换为PHP/unix时间戳或PHP DateTime对象(PHPExcel_Shared_date::ExcelToPHP()和PHPExcel_Shared_date::ExcelToPHPObject()),
然后可以使用PHP自己的日期处理函数来显示,Excel中存储的时间值实际上是一天的分数,因此0.2是24小时(或1440分钟或86400秒)times 0.2。您可以根据该信息计算一天中的时间,然后从一天开始计算。这使它比格式化的时间更有用,但可读性要差得多。

向我们显示您的代码、错误的输出以及所需内容。。例如,在Excel中,显示的值为“4:48”,在公式栏中,值为4:48:00 AM,使用PHPExcel解析后,值为0.2。