2015-02-12 218 views
-1

美好的一天家伙 我对如何检测单元格值是否已被格式化至日期有疑问 当我上传日期值时使用此代码PHPExcel检测单元格值是否为格式

$data = $objWorksheet->getCellByColumnAndRow($col, $row); 

当单元格值格式化为日期值$data = 27474$data = 12/2/1983时,然后我用这个代码格式化自己的最新

if(PHPExcel_Shared_Date::isDateTime($data)){ 
      $cellValue = $objWorksheet->getCellByColumnAndRow($col, $row)->getValue(); 
      $dateValue = PHPExcel_Shared_Date::ExcelToPHP($cellValue);       
      $dob = date('Y-m-d',$dateValue);  
    }        

现在,问题是当$data是在日期格式化这个代码是OK,但是当$data未格式化的值是$data = 2036-02-18这是错误的值

谁能帮助我如何解决这个问题,在此先感谢

+0

使用'PHPExcel_Shared_D ate :: isDateTime()'是识别一个单元格是否包含日期值的正确方法,但是也应该注意,如果一个文件已经被加载了'readDataOnly'设置为'true',那么就没有方法来识别日期值,因为它只是将日期值与正常浮点值区分开来的数字格式掩码 – 2015-02-12 11:33:41

+0

您的其他选择是在知道单元格包含一个单元格时调用'getFormattedValue()'而不是'getValue()'日期,虽然这将返回格式化字符串的日期(使用与MS Excel中相同的格式),这可能并不总是与您希望在脚本中格式化的方式一致 – 2015-02-12 11:44:08

+0

但是,如果单元格仅包含一个字符串(例如)“2015年2月12日”的值,那么这只是一个字符串,并且PHPExcel不会将其识别为日期 – 2015-02-12 11:54:27

回答

3

请试试这个,这应该工作,

if(PHPExcel_Shared_Date::isDateTime($data)){ 
    $cellValue = $objWorksheet->getCellByColumnAndRow($col, $row); 
    $InvDate= $cellValue->getValue(); 

    if(PHPExcel_Shared_Date::isDateTime($cell)) { 
    $InvDate = date($format, PHPExcel_Shared_Date::ExcelToPHP($InvDate)); 
} 
} 
2

感谢您的帮助球员,然而,这竟然是解决我的问题:

$data = $objWorksheet->getCellByColumnAndRow($col, $row); 

if(!strtotime($data)) { 
    if(PHPExcel_Shared_Date::isDateTime($data)) { 
     $cellValue = $objWorksheet->getCellByColumnAndRow($col, $row)->getValue(); 
     $dateValue = PHPExcel_Shared_Date::ExcelToPHP($cellValue);      
     $dateh  = date('Y-m-d',$dateValue);       
    } else {       
     $dateh = "";             
    } else { 
     $st = strtotime($data); 
     $dateh = date('Y-m-d',$st);       

    }    
} 
相关问题