我正在开发一个需要接受Excel文件(.xls以及.xlsx文件)的系统,这些文件包含多个列:date
,location
,time
等等。
date
和time
单元格的格式为用户希望格式化的格式。 date
格式可以是dd-mm-yyyy
或mm/dd/yyyy
,time
格式可以是h:mm
或hh:mm:ss
。当然,只要Excel接受它,任何其他格式都是允许的。
这意味着我需要使用$cell->getFormattedValue()
方法来获取我需要的值,因为我需要将值作为用户格式化的方式。但这就是问题所在。
由于某种原因,日期始终以dd/mm/yyyy
格式返回。我用Excel5和Excel2007阅读器对它进行了测试,但它们都给出了相同的结果。在上传的Excel工作表中,格式为dd-mm-yyyy
。我还使用$cell->getStyle()->getNumberFormat()->getFormatCode()
来检查使用的格式是什么,并且返回dd/mm/yyyy;@
,与上传的文件不对应。
我对time
列有完全相同的问题,我定义的格式为hh:mm
,但它返回h:mm
格式的值。
我考虑使用正则表达式来检查它是否是日期或时间并相应地更改格式,但我认为这不是正常行为,因为我在互联网上找不到任何相关信息。我发现了许多关于人们没有正确格式化数据的主题,但这是由于阅读器上的setReadDataOnly()
方法,这不是我的格式化结果,但在格式错误。我还在完整的工作表上尝试了toArray()
方法,但这也会以错误的方式返回日期。
有关为什么Excel阅读器将所有日期转换为某种默认日期格式/掩码的想法?
如果有必要,我可以使用这个标准,但是我需要了解这是编程行为还是错误。因为如果它是一个bug,我不能每次都依赖这个输出,如果它是我编程的话。但如果它被编程,我怎么能在需要时得到真正的getFormattedValue?
PS。它与How to get XLS file format value using PHPExcel有相似之处,但这不是这种情况。我得到了formattedValue,但格式错误。当我使用getValue()
时,我甚至得到一个数字而不是日期,因此格式化掩码正在运行。