【问题标题】:PHPExcel - Reading Date valuesPHPExcel - 读取日期值
【发布时间】:2013-07-24 17:25:27
【问题描述】:

我正在使用 PHPExcel 库来读取电子表格数据。这个库让我无法读取“日期”值。

问题: 即使'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)'。

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

任何帮助将不胜感激。

【问题讨论】:

  • 什么版本的 PHPExcel? 1.7.9 是最新的生产版本;我仍在开发将成为 2.0.0 的版本

标签: phpexcel


【解决方案1】:

如果$objReader->setReadDataOnly(true);,那么唯一可以识别日期的阅读器是 Gunumeric 阅读器。一个日期值只能通过数字格式掩码来识别,setReadDataOnly(true)告诉Reader不要读取格式,所以后续不能识别日期(Gnumeric是个例外,因为它是在识别出问题之后才写的,但是none不管setReadDataOnly 的值如何,其他Reader 的大部分都已被修改为读取此信息。如果您需要识别日期,那么此时唯一的选择是$objReader->setReadDataOnly(false);

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

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

你说读者现在正在阅读ALL the ROWS + COLUMNS found in the excel:它应该,不管setReadDataOnly 的值。如果你不想读取所有的行和列,那么你需要设置一个读取过滤器。

【讨论】:

    猜你喜欢
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 2018-04-24
    相关资源
    最近更新 更多