繁体   English   中英

PHPExcel文件迭代的日期问题

[英]PHPExcel date issue on file iteration

我使用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;
                    }
                }
            }

但这导致我发生致命错误“未捕获的TypeError:传递给PHPExcel_Shared_Date :: isDateTime()的参数1必须是PHPExcel_Cell的实例,给出了字符串”

有什么建议么?

如果该单元格的日期格式掩码为10/03/17 ,则这是对getFormattedValue()的调用将返回的格式; 这不是插入数据库的好格式。 最好还是使用不同的格式掩码,甚至最好将值作为格式化字符串而不是DateTime对象(或unix时间戳)检索。

但是,更关键的是

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

您在其中传递MS Excel时间戳值(简单的浮点数)的地方,看它是否是日期/时间。 PHPExcel无法识别浮点数是否为日期; 它需要能够读取该单元格的数字格式掩码。 您需要将单元格本身传递给isDateTime() ,而不仅仅是传递值。

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

PHPExcel API文档中所示 ; 并与错误消息完全一样

“传递给PHPExcel_Shared_Date :: isDateTime()的未捕获的TypeError:参数1必须是PHPExcel_Cell的实例,给出了字符串”

告诉你:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM