PHPexcel导入最后一步批量添加时报错

浏览:1364 发布日期:2017/05/25 分类:求助交流 关键字: PHPexcel,
搜了两个方法,都是最后一步insertAll()时报错。

但是刚写完这个功能的时候第一次导入是成功的,再导入就报错了
1public function excel()
    {
        Loader::import('PHPExcel.Classes.PHPExcel');
        Loader::import('PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');
        Loader::import('PHPExcel.Classes.PHPExcel.Reader.Excel5');
        //获取表单上传文件
        $file = $this->request->file('import');
        $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
        if ($info) {
            //echo $info->getFilename();
            $exclePath = $info->getSaveName();  //获取文件名
            $file_name = ROOT_PATH . 'public' . DS . 'uploads' . DS . $exclePath;   //上传文件的地址
            $objReader =\PHPExcel_IOFactory::createReader('Excel2007');
            $obj_PHPExcel =$objReader->load($file_name, $encode = 'utf-8');  //加载文件内容,编码utf-8
            
            $excel_array=$obj_PHPExcel->getsheet(0)->toArray();   //转换为数组格式
            array_shift($excel_array);  //删除第一个数组(标题);
            $data = [];           
        
            foreach($excel_array as $k=>$v) {
                $data[$k]['act_id'] = $v[0];
                $data[$k]['act_name'] = $v[1];
                $data[$k]['material_code'] = $v[2];
                $data[$k]['material'] = $v[3];
                $data[$k]['material_norms'] = $v[4];
                $data[$k]['unit'] = $v[5];
                $data[$k]['plan_count'] = $v[6];
                $data[$k]['remark'] = $v[7];
            }
            //var_dump($data);exit();           
            $result = Db::name('DesignDeliverInfo')->insertAll($data); //批量插入数据
            //var_dump($result);exit();
            return $result;
           
        } else {
            return $file->getError();
        }
    } 
2public function excel()
    {
        $file = $this->request->file('import');
        $path = ROOT_PATH . 'public/tmp/uploads/';
        $info = $file->move($path);
        $filename = $path . $info->getSaveName();           
        // 通过文件上传,然后取到上传后的完整路径文件名        
        //$file = $filename;
        // 解析 Excel 头部信息,返回 $excelHeader = ['A' => '第一行A列描述', 'B' => '第一行B列描述', 'C' => '第一行C列描述',...]
        $excelHeader = \Excel::parseHeader($filename);   
        // 将 $excelHeader 数据抛给前端,让用户选择对应关系,然后再返回给后台进行对应数据的解析,例如抛给后台的数据如下
        $header = ['A' => 'act_id', 'B' => 'act_name', 'C' => 'material_code', 'D' => 'material', 'E' => 'material_norms', 'F' => 'unit', 'G' => 'plan_count', 'H' => 'remark'];
        $result = \Excel::parse($filename, $header, 20, function ($data) {   
            //var_dump($data);
            Db::name('DesignDeliverInfo')->insertAll($data);
        });
        var_dump($result);exit();
    } 
报错内容:
SQLSTATE[21000]: Cardinality violation: 1222 The used SELECT statements have a different number of columns
最佳答案
评论( 相关
后面还有条评论,点击查看>>