PHPExcel检测单元格值的格式是否为最新

PHPExcel检测单元格值的格式是否为最新,php,phpexcel,phpexcelreader,Php,Phpexcel,Phpexcelreader,大家好 我在如何检测单元格值是否已格式化为最新格式方面遇到了问题 当我上传日期值时,我使用此代码 $data = $objWorksheet->getCellByColumnAndRow($col, $row); 当单元格值被格式化为日期时,值为$data=27474而不是$data=12/2/1983时,我使用此代码格式化其日期 if(PHPExcel_Shared_Date::isDateTime($data)){ $cellValue = $objWorksh

大家好 我在如何检测单元格值是否已格式化为最新格式方面遇到了问题 当我上传日期值时,我使用此代码

$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
在日期格式化时,此代码正常,但当
$data
未格式化时,值为
$data=2036-02-18
,这是错误的值


有人能帮我解决这个问题吗?提前谢谢

请试试这个,这个应该行得通

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)); 
}  
}  

请试试这个,这个应该有用

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)); 
}  
}  

多亏了你们的帮助,我的问题终于解决了:

$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);                         

    }               
}

多亏了你们的帮助,我的问题终于解决了:

$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);                         

    }               
}

就因为我遇到了这个…我使用strotime方法,但我通过mssql提取数据进行处理,所以我就这样做了

if(!strtotime($r['effective_date'])) {
            $r['effective_date'] = \Carbon\Carbon::parse(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($r['effective_date']))->format('Y-m-d');
        }

就因为我遇到了这个…我使用strotime方法,但我通过mssql提取数据进行处理,所以我就这样做了

if(!strtotime($r['effective_date'])) {
            $r['effective_date'] = \Carbon\Carbon::parse(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($r['effective_date']))->format('Y-m-d');
        }

使用
PHPExcel\u Shared\u Date::isDateTime()
是识别单元格是否包含日期值的正确方法,但还应注意,如果文件已加载
readDataOnly
设置为
true
,则无法识别日期值,因为只有数字格式掩码才能将日期值与普通浮点值区分开来,所以当您知道单元格包含日期时,另一个选项是调用
getFormattedValue()
而不是
getValue()
,尽管这将以格式化字符串的形式返回日期(使用与MS Excel中相同的格式),这可能并不总是与您希望在脚本中对其进行格式化的方式一致,但如果单元格仅包含字符串值(例如)
“12-Feb-2015”
,则这只是一个字符串,PHPExcel不会将其识别为date@MarkBaker多亏了你的评论,我才意识到getFormattedValue()使用
PHPExcel\u Shared\u Date::isDateTime()
是识别单元格是否包含日期值的正确方法,但还应注意,如果文件已加载
readDataOnly
设置为
true
,则无法识别日期值,因为只有数字格式掩码才能将日期值与普通浮点值区分开来,所以当您知道单元格包含日期时,另一个选项是调用
getFormattedValue()
而不是
getValue()
,尽管这将以格式化字符串的形式返回日期(使用与MS Excel中相同的格式),这可能并不总是与您希望在脚本中对其进行格式化的方式一致,但如果单元格仅包含字符串值(例如)
“12-Feb-2015”
,则这只是一个字符串,PHPExcel不会将其识别为date@MarkBaker多亏了你的评论,我才意识到getFormattedValue()