PHPExcel - 读取日期值

时间:2013-07-24 17:25:28

标签: phpexcel

我正在使用PHPExcel库来读取电子表格数据。这个库让我无法阅读'DATE'值。

问题: 即使'setReadDataOnly'设置为'false',如何指示PHPExcel正确读取'DATE'值?

说明

PHPExcel版本:2.1,环境:Ubuntu 12

以下是代码块:

$objReader = \PhpExcel\PHPExcel_IOFactory::createReaderForFile($spreadSheetFullFilePathString);
$objReader->setReadDataOnly(true); 
$objPHPExcel = $objReader->load($spreadSheetFullFilePathString);
$objWorksheetObject = $objPHPExcel->getActiveSheet();

默认情况下,“DATE”列值会显示“整数”值。

我发现,'$ objReader-> setReadDataOnly(true)'这一行造成了麻烦。 因此,将其更改为'$ objReader-> setReadDataOnly(false)'。

我在此更改后正确获取Date列值。但现在读者正在阅读excel中的所有ROWS + COLUMNS。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

如果$objReader->setReadDataOnly(true);,那么唯一可以识别日期的读者就是Gunumeric阅读器。日期值只能通过数字格式掩码来标识,而setReadDataOnly(true)告诉读者不要读取格式,因此以后不能识别日期(Gnumeric是例外,因为它是在发现问题后写的,但是,无论setReadDataOnly值是什么,其他读者都没有被修改过来读取这些信息。如果你需要确定日期,那么此时唯一的选择就是$objReader->setReadDataOnly(false);

但是,对于日期单元格,您不应该获得整数值;你应该得到一个浮点数:它是标识Excel datetime序列化值的时间部分的小数。

如果您知道哪些单元格包含日期,则可以使用PHPExcel_Shared_DateTime类中定义的辅助函数将它们转换为unix时间戳或PHPExcel DateTime对象(然后可以使用所有标准的PHP日期处理函数)。

你说读者正在阅读ALL the ROWS + COLUMNS found in the excel:无论setReadDataOnly值如何,都应该这样做。如果您不想读取所有行和列,则需要设置读取过滤器。