zoukankan      html  css  js  c++  java
  • laravel 使用PhpSpreadsheet将Excel导入到MySQL数据库


    /**
    * csv导入mysql
    * @param Request $request
    * 安装,导入 导出 参照手册 https://www.helloweba.net/php/561.html
    */
    public function uploadCSV(Request $request)
        {
            // 如果是 POST 方法才读取文件
            if ($request->isMethod('POST')){
                $file = $request->file('select_file');
                $ext = $file->getClientOriginalExtension(); //扩展名
                $extensions = ['csv'];
                if(!in_array($ext, $extensions)) Base::output(['code'=>601]);
    
                // 原文件名
                $originalName = $file->getClientOriginalName();
                // 临时绝对路径
                $realPath = $file->getRealPath();
                // 修改文件名
                $filename = date('Ymdhis').uniqid('_','').$originalName;
                // 储存到磁盘相应的路径
                $bool = Storage::disk('uploads')->put($filename,file_get_contents($realPath));
                //判断是否上传成功
                if($bool) {
                    $path = public_path('uploads/' . date('Ymd')) . '/' . $filename;
                    $reader = IOFactory::createReader('Csv');
                    $reader->setReadDataOnly(TRUE);
                    $spreadsheet = IOFactory::load($path);//载入csv表格
                    $worksheet = $spreadsheet->getActiveSheet();
                    $highestRow = $worksheet->getHighestRow(); // 总行数
                    $highestColumn = $worksheet->getHighestColumn(); // 总列数
    
                    $lines = $highestRow - 1; //过滤掉第一行的标题,从第二行正式数据开始
                    if ($lines <= 0) {
                        Base::output(['code'=>602]);
                    }
                    //至此上传表格成功,我们可以运用 PhpSpreadSheet 所提供的方法来获取表格的数据,存入数据库
    
                    //从第二行开始循环遍历
                    for ($row = 2; $row <= $highestRow; ++$row) {
                        $AEtop = new AetopModel();
                        $ats_name = $worksheet->getCellByColumnAndRow(1, $row)->getValue(); //产品名
                        $ats_price = $worksheet->getCellByColumnAndRow(2, $row)->getValue(); //价格
                        $ats_url = $worksheet->getCellByColumnAndRow(3, $row)->getValue(); //url
    
                        $obj = $AEtop->select('id')->where('ats_name', $ats_name)->first();
                        if($obj){
                            $AetopModel = AetopModel::find($obj['id']);
                            $AetopModel->ats_name = $ats_name;
                            $AetopModel->ats_price = $ats_price;
                            $AetopModel->ats_url = $ats_url;
                            try{
                                //更新db
                                $res = $AetopModel->save();
                            }catch (Exception $e){
                                Tool::DBlog($e->getMessage());
                            }
                        }else{
                            $AEtop->ats_name = $ats_name;
                            $AEtop->ats_price = $ats_price;
                            $AEtop->ats_url = $ats_url;
                            try{
                                //保存db
                                $res = $AEtop->save();
                            }catch (Exception $e){
                                Tool::DBlog($e->getMessage());
                            }
                        }
                    }
                    if($res) Base::output(['code'=>200]);
                }
            }
    

    excel格式:

      

    注:我需要传csv格式;请大家自行优化,这是没有优化的版本,比较直观,其中Base::output()大家不用理会,是我自己封装的报错函数

    
    
    
  • 相关阅读:
    各个基础学习模型超参数调节
    集成学习算法模板
    数据分析关键代码汇总
    数据预处理以及探索性分析(EDA)
    python pandas相关知识点(练习)
    错误 1 未能找到类型或命名空间名称“”, 引入DLL文件出现提示文件不存在问题
    TCPIP学习笔记
    Aforge.net识别简易数字验证码问题
    访问家庭路由器下的主机-路由设置
    python--8、socket网络编程
  • 原文地址:https://www.cnblogs.com/qichao123/p/14610893.html
Copyright © 2011-2022 走看看