转自:https://www.cnblogs.com/shenlin/p/7826664.html
准备工作:
1、tp环境(本人使用的是tp3.2)。
2、phpexecl扩展包,下载地址:点击下载,下载地址(class.php):
1 |
|
官方地址:点击下载(github下载地址) 。
3、下载扩展包,解压后,放在ThinkPHP\Library\Org\Util目录下,最终目录结构为:ThinkPHP\Library\Org\Util\PHPExcel,将下载的包解压后.放在Util下。
写代码:
1、导出代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
|
导出结果截图
2、导入代码
//批量导入数据 public function batch_in(){ //上传文件-获取文件信息 $info = $this->execl_upload();//获取文件路径 $File_Name = $info['batch']['savepath'].$info['batch']['savename'];//存放位置 $exts = $info['batch']['ext'];//获取文件后缀 //引入第三方类 import("Org.Util.PHPExcel"); $PHPExcel = new \PHPExcel(); if($exts == 'xls'){ import("Org.Util.PHPExcel.Reader.Excel5"); $PHPReader=new \PHPExcel_Reader_Excel5(); }else if($exts == 'xlsx'){ import("Org.Util.PHPExcel.Reader.Excel2007"); $PHPReader=new \PHPExcel_Reader_Excel2007(); }else if($exts == 'csv'){ import("Org.Util.PHPExcel.Reader.CSV"); $PHPReader=new \PHPExcel_Reader_CSV(); } //载入文件 $PHPExcel = $PHPReader->load($File_Name,$encode="utf-8"); //获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推 $currentSheet=$PHPExcel->getSheet(0); //获取总列数 $allColumn=$currentSheet->getHighestColumn(); //获取总行数 $allRow=$currentSheet->getHighestRow(); //循环获取表中的数据,$currentRow表示当前行,从哪行开始读取数据,索引值从0开始 for($currentRow=2;$currentRow<=$allRow;$currentRow++){ //从哪列开始,A表示第一列 for($currentColumn='A';$currentColumn<=$allColumn;$currentColumn++){ //数据坐标 $address=$currentColumn.$currentRow; //读取到的数据,保存到数组$arr中 $data[$currentRow][$currentColumn]=$currentSheet->getCell($address)->getValue(); } } $number_true = 0; $number_error=0; //遍历成数据库字段,便于执行 foreach ($data as $key => $value) { //$data_info[$key]['id'] = $data[$key]['A']; $data_info[$key]['inputtime'] =$data_info[$key]['signtime'] = $data[$key]['B']; $data_info[$key]['updatetime'] = $data[$key]['C']; $data_info[$key]['display'] = $data[$key]['D']; $data_info[$key]['name'] = $data[$key]['E']; $data_info[$key]['signip'] = $data[$key]['F']; $data_info[$key]['signcity'] = $data[$key]['G']; //如果出现空的情况,就删除 if($data_info[$key]['name'] == null){ unset($data_info[$key]); } //连接数据库,导入数据 $ResultInfo = D('Record')->create($data_info[$key]); if($ResultInfo){ if( D('Record')->add($data_info[$key])){ $number_true++; }else{ $number_error++; } } } if($number_true >1){ $this->success('导入成功',U('Result/result')); }else{ $this->error("导入失败"); } }
导入结果截图
3、文件上传代码
//execl上传 function execl_upload(){ $uplode= new \Think\Upload();//造实例化对象:造一个上传文件的类 $uplode->maxSize="31457280";//上传文件的大小 $uplode->exts=array('xls','xlsx','csv');//设置图片格式 $uplode->autoSub=true;//自动使用子目录保存上传文件 默认为true $uplode->subName=array('date','Ymd');//文件命名方式已时期时间戳命名 $uplode->rootPath="./";//表示在public文件夹下 $uplode->savePath="Public/Uploads/Execl/";//设置附件上传目录:表示在public文件夹下自动建一个Uploads文件夹 // 上传文件 $info = $uplode->upload(); if(!$info) { // 上传错误提示错误信息 $this->error($uplode->getError()); }else{ // 上传成功 获取上传文件信息 return $info; } }