文件迭代PHPExceldate问题

即时通讯使用PHPExcel将xlsx文件导入到数据库,下面的代码非常适合将$ val作为单元格值,并避免插入colum头文件:

$dataArr = array(); foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { $worksheetTitle = $worksheet->getTitle(); $highestRow = $worksheet->getHighestRow(); // eg 10 $highestColumn = $worksheet->getHighestColumn(); // eg 'F' $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); for ($row = 1; $row <= $highestRow; ++ $row) { for ($col = 0; $col < $highestColumnIndex; ++ $col) { $cell = $worksheet->getCellByColumnAndRow($col, $row); $val = $cell->getValue(); $dataArr[$row][$col] = $val; } } } unset($dataArr[1]); 

问题是当我尝试插入date值时,当前的Excel单元格date格式是10/03/17,但在我的数据库中插入0000-00-00。

我在这里尝试了答复,但不是运气。

这是我目前的代码:

 foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { $worksheetTitle = $worksheet->getTitle(); $highestRow = $worksheet->getHighestRow(); // eg 10 $highestColumn = $worksheet->getHighestColumn(); // eg 'F' $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); for ($row = 1; $row <= $highestRow; ++ $row) { for ($col = 0; $col < $highestColumnIndex; ++ $col) { $cell = $worksheet->getCellByColumnAndRow($col, $row); $val = $cell->getValue(); if (PHPExcel_Shared_Date::isDateTime($val)) { echo $cell->getFormattedValue() , EOL; } else { echo $cell->getValue() , EOL; } $dataArr[$row][$col] = $val; } } } 

但是这导致我致命错误“Uncaught TypeError:传递给PHPExcel_Shared_Date :: isDateTime()的参数1必须是PHPExcel_Cell的一个实例,string给出”

有什么build议么?

如果单元格的date格式掩码是10/03/17 ,那么调用getFormattedValue()的格式将返回; 这不是插入数据库的好格式。 你最好明确地使用一个不同的格式掩码,或者甚至检索值作为一个DateTime对象(或一个Unix时间戳)比格式化的string。

不过,更关键的是

 if (PHPExcel_Shared_Date::isDateTime($val)) { 

你传递的MS Excel时间戳值(一个简单的浮点数),看看它是一个date/时间。 PHPExcel无法识别一个浮动是否是一个date, 它需要能够读取单元格的数字格式掩码。 您需要将单元格本身传递给isDateTime() ,而不仅仅是值。

 if (PHPExcel_Shared_Date::isDateTime($cell)) { 

如PHPExcel API文档中所示 ; 和错误信息一样

“Uncaught TypeError:传递给PHPExcel_Shared_Date :: isDateTime()的参数1必须是PHPExcel_Cell的一个实例,string给出”

告诉你: