【发布时间】:2017-04-04 19:25:22
【问题描述】:
我使用 PHPExcel 将 xlsx 文件导入数据库,以下代码非常适合将 $val 作为单元格值传递并避免插入列标题:
$dataArr = array();
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
$worksheetTitle = $worksheet->getTitle();
$highestRow = $worksheet->getHighestRow(); // e.g. 10
$highestColumn = $worksheet->getHighestColumn(); // e.g '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]);
问题是当我尝试插入日期值时,当前 Excel 单元格的日期格式是 10/03/17,但在我的数据库中插入了 0000-00-00。
我试过回复here 但不是运气。
这是我当前的代码:
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
$worksheetTitle = $worksheet->getTitle();
$highestRow = $worksheet->getHighestRow(); // e.g. 10
$highestColumn = $worksheet->getHighestColumn(); // e.g '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;
}
}
}
但这导致我出现致命错误“未捕获的 TypeError:传递给 PHPExcel_Shared_Date::isDateTime() 的参数 1 必须是 PHPExcel_Cell 的实例,给定字符串”
有什么建议吗?
【问题讨论】:
-
参见
PHPExcel_Shared_Date::ExcelToPHP()而不是$cell->getFormattedValue()。看起来它返回一个 UNIX 时间戳值。