准备工作:首先需要下载PHPExcel文件放入vendor目录下。
导入功能控制器类对应的方法的书写如下所示:
public function submitData() { if (request()->isPost()) { require "../vendor/PHPExcel/Classes/PHPExcel.php"; //引入PHPExcel文件路径并运行文件,当文件报错时会产生一个致命错误并且终止执行, // vendor("PHPExcel.PHPExcel"); //处理Excel文件请求 $file = request()->file('file'); //加载excel文件 if (is_null($file)) { return $this->success("上传文件不能为空"); } $info = $file->validate(['size' => 1567800, 'ext' => 'xlsx,xls,csv'])->move(ROOT_PATH . 'public' . DS . 'uploads' . DS . 'excel'); //validate()用于表单验证,这里验证文件后缀名称,尺寸大小 if ($info) { $exclePath = $info->getSaveName(); //获取文件名 $file_name = ROOT_PATH . 'public' . DS . 'uploads' . DS . 'excel' . DS . $exclePath; //上传文件的地址 // $objReader = \PHPExcel_IOFactory::createReader('Excel2007'); // $obj_PHPExcel = $objReader->load($file_name,);//加载文件内容,编码utf-8 $obj_PHPExcel = \PHPExcel_IOFactory::load($file_name);//$encode='utf-8' //加载文件内容,编码utf-8 echo "<pre>"; $excel_array = $obj_PHPExcel->getsheet(0)->toArray(); //转换为数组格式 array_shift($excel_array); //删除第一个数组(标题); //逻辑代码 $data = []; $i = 0; foreach ($excel_array as $k => $v) { //遍历循环excel对应的数据的数组每一列的内容 $data[$k]['name'] = $v[1]; $data[$k]['gender']=$v[2]; if($v[3]=='一班'){ $classId=1; }else if($v[3]=='二班'){ $classId=2; }else if($v[3]=='三班'){ $classId=3; }else{ $classId=Null; } $data[$k]['class_id']=$classId; // if($request->ext($v[4])=='jpg'){ // echo 'ext: ' . $request->ext($v[4]); // } $data[$k]['photo']=$v[4]; $i++; } // exit; var_dump($data); $success=0; for($j=0;$j<$i;$j++){ $sql = db('student')->insert($data[$j]); //批量插入数据 var_dump($sql); if($sql){ $success++; } } // $success = db('student')->insertAll($data); //批量插入所有数据 $error = $i - $success; echo "总{$i}条,成功{$success}条,失败{$error}条。"; }else{ // 上传失败获取错误信息 echo $file->getError(); } } }
里面一些信息需要进行一下修改。