【问题标题】:PHPExcel detect if the cell value is formated to date or notPHPExcel检测单元格值是否格式化为日期
【发布时间】:2015-02-12 09:19:01
【问题描述】:

大家好 我对如何检测单元格值是否格式化为日期有疑问 当我上传日期值时,我使用此代码

$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,这是错误值

谁能帮我解决这个问题提前谢谢

【问题讨论】:

  • 使用PHPExcel_Shared_Date::isDateTime()是识别单元格是否包含日期值的正确方法,但还应注意,如果已加载文件,则将readDataOnly设置为true ,则无法识别日期值,因为它只是将日期值与正常浮点值区分开来的数字格式掩码
  • 你的另一个选择是调用getFormattedValue() 而不是getValue() 一旦你知道一个单元格包含一个日期,尽管这会将日期作为格式化字符串返回(使用与它相同的格式MS Excel),这可能并不总是与您希望在脚本中格式化的方式一致
  • 但是如果单元格只包含一个字符串值(例如)"12-Feb-2015",那么这只是一个字符串,PHPExcel不会将其识别为日期
  • @MarkBaker 感谢您的评论,我意识到 getFormattedValue()

标签: php phpexcel phpexcelreader


【解决方案1】:

请试试这个,应该可以的,

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

    【讨论】:

      【解决方案3】:

      只是因为我遇到了这个......我使用了 strtotime 方法,但我正在通过 mssql 提取数据进行处理,所以我就这样做了

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多