phpexcel日期读取格式错误

时间:2016-04-24 17:02:33

标签: php phpexcel

我知道有很多类似的问题,但实际上没有一个问题有帮助。

我的excel文件中有一个单元格,我必须阅读。

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

我现在需要获得这些的Y-m-d格式我尝试使用PHPExcel中的所有可用函数,但结果仍然不正确。

我无法对格式进行硬编码,因为有多个格​​式有多种格式,我需要自己理解

我尝试过使用

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

我真的需要这个,我已经浪费了一周时间。

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

更新

当我阅读评论时,我回过头来检查我写的函数,我发现其中一个单元格[甚至]它在Excel中格式化,它解析的格式错误,在这种情况下是一般格式;

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

但是,(总有一个但是)。感谢Microsoft及其excel,我仍然无法区分2016年2月1日和1月2日!这永远是个问题。

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

2 个答案:

答案 0 :(得分:3)

如果getValue()getFormattedValue()都返回包含13/4/2015的字符串,那么您的单元格内容不是MS Excel日期/时间值,而是标准字符串,并尝试应用日期将字符格式化为字符串将无法实现任何效果。 PHPExcel的日期格式化功能仅在单元格内容确实是MS Excel序列化日期时间值时才有效,而不仅仅是字符串。

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

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

答案 1 :(得分:0)

$objReader= PHPExcel_IOFactory::createReader('Excel2007');  // For excel 2007 
//Set to read only
$objReader->setReadDataOnly(true);        
//Load excel file
$objPHPExcel=$objReader->load(FCPATH.'assets/uploads/yourFolder/'.$file_name);        
$totalrows=$objPHPExcel->setActiveSheetIndex(0)->getHighestRow();   //Count Numbe of rows avalable in excel          
$objWorksheet=$objPHPExcel->setActiveSheetIndex(0);                
//loop from first data untill last data
for($i=2;$i<=$totalrows;$i++)
{   
$field0= $objWorksheet->getCellByColumnAndRow(0,$i)->getValue(); //Excel Column 1
$field1 = $objWorksheet->getCellByColumnAndRow(1,$i)->getValue(); //Excel Column 2
$field2= $objWorksheet->getCellByColumnAndRow(2,$i)->getFormattedValue(); //Excel Column 3
$date = PHPExcel_Shared_Date::ExcelToPHP($field2); //unix value
$field2= gmdate("Y-m-d", $date); //you can echo this value
}