首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件迭代中的PHPExcel日期问题

问文件迭代中的PHPExcel日期问题
EN

Stack Overflow用户
提问于 2017-04-04 19:25:22
回答 1查看 401关注 0票数 0

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

代码语言:javascript
复制
        $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。

我试着回答这里,但没有运气。

以下是我的当前代码:

代码语言:javascript
复制
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的一个实例,字符串给定“

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-04 21:52:30

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

然而,更重要的是

代码语言:javascript
复制
if (PHPExcel_Shared_Date::isDateTime($val)) {

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

代码语言:javascript
复制
if (PHPExcel_Shared_Date::isDateTime($cell)) {

如PHPExcel API文档中所示,与错误消息完全相同

"Uncaught :传递给PHPExcel_Shared_Date::isDateTime()的参数1必须是PHPExcel_Cell的实例,字符串给定“

告诉你:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43215963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档