我使用PHPExcel将xlsx文件导入数据库,下面的代码非常适合将$val作为单元格值传递,并避免插入colum:
$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。
我试着回答这里,但没有运气。
以下是我的当前代码:
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;
}
}
}但是这导致了一个致命的错误:"Uncaught :传递给PHPExcel_Shared_Date::isDateTime()的参数1必须是PHPExcel_Cell的一个实例,字符串给定“
有什么建议吗?
发布于 2017-04-04 21:52:30
如果单元格的日期格式掩码是10/03/17,那么对getFormattedValue()的调用将返回该格式;在数据库中插入该格式并不好。您最好显式地使用不同的格式掩码,或者甚至检索值为DateTime对象(或unix时间戳),而不是格式化的字符串。
然而,更重要的是
if (PHPExcel_Shared_Date::isDateTime($val)) {在这里,您要传递MS时间戳值(一个简单的浮点数),以查看它是否是一个日期/时间。PHPExcel无法识别浮点是否是日期;它需要能够读取单元格的数字格式掩码。您需要将单元本身传递给isDateTime(),而不仅仅是值。
if (PHPExcel_Shared_Date::isDateTime($cell)) {如PHPExcel API文档中所示,与错误消息完全相同
"Uncaught :传递给PHPExcel_Shared_Date::isDateTime()的参数1必须是PHPExcel_Cell的实例,字符串给定“
告诉你:
https://stackoverflow.com/questions/43215963
复制相似问题