2

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

谢谢你。

4

3 回答 3

9

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

$my_cell = $objWorksheet->getCellByColumnAndRow(1, 1);
$my_cell_value = PHPExcel_Style_NumberFormat::toFormattedString($cell->getCalculatedValue(), 'hh:mm:ss');
print $my_cell_value;
于 2013-04-24T09:19:33.567 回答
2

The value for Time as it is stored in Excel is actually the fraction of the day, so 0.2 is 24 hours (or 1440 minutes or 86400 seconds) times 0.2. You can calculate the time of day based on that information, and then calculating from the beginning of the day. It makes it a little more usable than a formatted time, but a lot less readable.

于 2013-04-26T23:23:43.630 回答
2

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

如果您只是从单元格中获取值,您将读取原始时间戳值(MS Excel 将日期和时间值保存为时间戳;就像 PHP 中的 Unix 时间戳值一样,除了 Excel 的时间戳是自 1 日以来的天数1900 年 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 自己的日期处理函数显示

于 2013-04-24T09:34:29.493 回答