2016-04-24 65 views
1

我知道有很多类似的问题,但他们都没有帮助。 我在我的Excel文件中有一个单元格,我必须阅读。phpexcel日期是读取错误的格式

Cell Date in Excel

和Excel文件格式是像下面Date Format In Excel

在我的PHP代码

我有它在获取工作表名称和单元以读取细胞的功能。

$cellDate = $xls->getSheetByName($sheet)->getCell($cell)->getValue(); 

我也试图与getFormattedValue(),并得到了相同的结果

我然后用这个

$format = $xls->getSheetByName($sheet)->getCell($cell)->getStyle()->getNumberFormat()->getFormatCode(); 

得到的格式,当我在PHP呼应了这一点,就说明日期为

13/4/2015 

以及它显示的格式

mm-dd-yyyy 

它显示为DD-MM-YYYY

我现在需要得到这些我已经使用PHPExcel所有可用的功能试图Y-M-d格式,但它仍是结果是不正确的。

我不能硬编码的格式,因为有多个小区多种格式,我需要这本身了解

我已经使用

$objPHPExcel->getActiveSheet() 
->getStyle('A1') 
->getNumberFormat() 
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2); 

我真的需要这一点,我尝试”已经浪费了一周的时间。

有无论如何告诉PHPEXCEL解析单元格中的任何日期为Y-m-d格式吗?

UPDATE

,因为我是通过我回去,并检查我写的函数的评论阅读,我发现这些细胞[甚至],它的格式在Excel中它的解析错误的格式在一个该案件是一般格式;

然后,我得到了getValue()和getFormattedValue()的值,并将这两个值进行比较,如果它们不相同,则表示格式正确,我可以使用PHPExcel从中获取日期。

但是,(总有一个但是)。感谢微软和它的卓越,我仍然无法区分2016年2月1日和1月2日!这永远是问题。

我唯一的建议是永远不要信任excel格式!

+0

'感谢微软及其excel' ....严格来说,这里不是Microsoft或Excel的错;它是以字符串值输入日期而不是让MS Excel使用自己的内部序列化日期/时间值的用户 –

回答

2

如果getValue()getFormattedValue()都返回包含13/4/2015那么你的内容是不是MS Excel的日期/时间值,但一个标准的字符串,并试图将日期格式面膜适用于字符串起不到任何的字符串。如果单元格内容真的是MS Excel序列化的日期时间值,PHPExcel的日期格式化函数将不起作用,而不仅仅是字符串。

您必须使用标准PHP函数(如DateTime :: createFromFormat())将字符串值转换为日期时间对象,然后可以使用format()方法将其转换为您想要的任何格式。

或者,尝试将值传递给PHPExcel_Shared_Date :: PHPToExcel()将其转换为MS Excel序列化时间戳;并将其设置为单元格值,然后可以设置一个格式掩码并使用getFormattedValue()

+0

我遇到的问题是我正在阅读1000多个(Locked Xls)文件,并且在某些日期, 2014-10-13 2014年10月13日,2014年10月13日,10,13,2014。我想我曾经写过一个关于800行的函数,以便能够理解它是哪种格式,但仍然无法弄清楚。我会遇到问题,当我有像01/02/2016日期,我不知道它是什么格式! –

+0

我也试过使用PHPExcel_Shared_Date :: PHPToExcel(),它是要么我不知道如何使用它或它不起作用 –

+0

我说,他们不是MS Excel日期,他们只是字符串如果getValue()'和'getFormattedValue()'返回的值相同,如果它只是一个字符串,PHPExcel无法真正帮助您...如果这些是MSS Excel日期值,则getValue ()会返回一个整数或浮点值,而不是一个字符串 –