文件迭代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给出”
告诉你: