日常生活中,表格的导入很多!每次做导入的时候还需要百度一下,很麻烦!
这次稍微总结下方法吧!
本方法适用tp5.0框架
适用的方法也简单!希望对大家能有点帮助吧!
由于我这次本机的composer安装后需要重启,但是我电脑上的项目又特别赶时间,算了,还是老土办法吧!
下面开始上教程
1:下载PHPexcel包
下载地址:https://github.com/PHPOffice/PHPExcel 点击下载zip包就可以了!
2:解压文件并重命名
3:上传到服务器的application目录下,具体如上图所示
4:创建导入的控制器,由于我这里是导入试题,所以我的控制器是exam。php
5:结合layui的上传插件,再控制器中实现数据的插入
/** * 新建试题 */ public function add() { require_once APP_PATH."myclass/PHPExcel/PHPExcel.php"; require_once APP_PATH."myclass/PHPExcel/PHPExcel/IOFactory.php"; require_once APP_PATH."myclass/PHPExcel/PHPExcel/Reader/Excel5.php"; $file = request()->file('file'); if($file){ $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads/exam'); $filename = $file->getInfo()["name"]; $path = '/public/uploads/exam/'.$info->getSaveName(); $objReader=\PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format $objPHPExcel=$objReader->load(".".$path);//$file_url即Excel文件的路径 $sheet=$objPHPExcel->getSheet(0);//获取第一个工作表 $highestRow=$sheet->getHighestRow();//取得总行数 $highestColumn=$sheet->getHighestColumn(); //取得总列数 $data = array(); //循环读取excel文件,读取一条,插入一条 for($j=2;$j<=$highestRow;$j++){ //从第一行开始读取数据 $str=''; for($k='A';$k<=$highestColumn;$k++){ //从A列读取数据 //这种方法简单,但有不妥,以'\\'合并为数组,再分割\为字段值插入到数据库,实测在excel中,如果某单元格的值包含了\\导入的数据会为空 $str.=$objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue().'\\';//读取单元格 } //explode:函数把字符串分割为数组。 $strs=explode("\\",$str); $d["content"] = $strs[1]; $d["A"] = $strs[2]; $d["B"] = $strs[3]; $d["C"] = $strs[4]; $d["D"] = $strs[5]; $d["answer"] = $strs[6]; $d["add_time"] = time(); array_push($data,$d); } $exam["title"] = $filename; $exam["add_time"] = time(); $exam["question_count"] = count($data); $exam["every_question_score"] = 100/count($data); //试题名查重 if(Db::name("exam")->where(["title"=>$filename])->find()){ return json(["code"=>40000,"msg"=>"试卷名重复,请检查是否早已导入"]); } $exam_id = Db::name("exam")->insertGetId($exam);//试卷名的完善和导入 foreach ($data as $k=> $v){ $data[$k]["exam_id"] = $exam_id; } $res = Db::name("exam_questions")->insertAll($data); unlink(".".$path); //删除excel文件 if($res){ return json(["code"=>200,"msg"=>"导入成功"]); }else{ return json(["code"=>40000,"msg"=>"导入失败"]); } } return $this->fetch(); }大家根据自己创建的文件目录去修改自己引入的excel的包路劲!
require_once APP_PATH."myclass/PHPExcel/PHPExcel/Reader/Excel5.php";如果报错试试require_once APP_PATH."myclass/PHPExcel/PHPExcel/Reader/Excel2017.php";其他报错可以参考
https://www.cnblogs.com/cqingt/p/5338023.html
代码下载地址【包含控制器文件】:
链接:https://pan.baidu.com/s/1Rvw4iSnM17NHEOA_CSS1ZA 密码:059h
本文由米醋儿网首发!转载请注明出处