2013-04-24 27 views
2

细胞我使用PHPExcel读一个Excel 2007文档。在这个文档中有一个带有“时间”格式的列,它在Excel中正确显示数据。当我试图解析这个列时,我会得到一些奇怪的值。任何想法如何解决这个问题?设置正确的阅读格式与PHPExcel

谢谢。

+0

向我们展示你的代码,你的输出错误,你需要.. – Svetoslav 2013-04-24 09:07:58

+0

例如什么,在Excel中显示的值是“4:48”,在公式栏的值是上午04时48分零零秒,并用解析后PHPExcel,值为0.2。 – Psyche 2013-04-24 14:19:39

回答

9

解析时,您需要指定列的格式。例如

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

是的,它的工作原理!谢谢。 – Psyche 2013-04-24 14:22:50

2

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

如果你只要从单元格的值,你会读一原料时间戳值(MS Excel中保存日期和时间值作为时间戳;像PHP,除了Excel的Unix时间戳值时间戳是自1900年1月1日以来的天数(或1904年1月1日,取决于它配置为使用哪个日历)。

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

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

或者,正如詹姆斯在他的回答也建议,可以通过应用与自己的格式格式化数字掩盖手动原始时间戳格式化值转换

第三种选择是,你可以使用PHPExcxel的内置日期处理功能,这个Excel时间戳值转换为PHP/Unix时间戳或到PHP DateTime对象(PHPExcel_Shared_Date :: ExcelToPHP()和PHPExcel_Shared_Date :: ExcelToPHPObject()分别), ,然后就可以显示使用PHP本身的日期处理功能

2

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