thinkphp导入导出excel表单数据

来源:互联网 发布:apk 反编译 拿到源码 编辑:程序博客网 时间:2024/04/28 07:45

在PHP项目经常要导入导出Excel表单。

先去下载PHPExcel类库文件,放到相应位置。

我在thinkphp框架中的位置为ThinkPHP/Library/Org/Util/

导入

在页面上传excel文件提交到后台,利用form表单提单即可

复制代码
<form method="post" enctype="multipart/form-data" action="" >  <input type="submit" value="导入" />                               <input  type="file" name="excel" />                    </form>  

 

复制代码

提交到后台后进行上传处理,这是一个执行上传的方法

复制代码
public function data(){        if(IS_POST){        //设置编码防止乱码        header("Content-Type:text/html;charset=utf-8");            $upload = new \Think\Upload();// 实例化上传类            $upload->maxSize   =     3145728 ;// 设置附件上传大小            $upload->exts      =     array('xls','xlsx','csv');// 设置附件上传类            $upload->rootPath  =     'Uploads/';            $upload->savePath  =     ''; // 设置附件上传目录            // 上传文件            $info   =   $upload->uploadOne($_FILES['excel']);            $filename = 'Uploads/'.$info['savepath'].$info['savename'];            $exts = $info['ext'];           // var_dump($info);            if(!$info) {// 上传错误提示错误信息                  $this->error($upload->geterror());              }else{// 上传成功                  $this->data_import($filename, $exts);            }                  }    }
复制代码

上传文件的格式设为excel的格式,xls,xlsx,csv均可支持

然后对上传后的文件内容进行读取导入,下面是一个读取的方法。

复制代码
protected function data_import($filename, $exts='xls')    {        //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入        import("Org.Util.PHPExcel");        //创建PHPExcel对象,注意,不能少了\        $PHPExcel=new \PHPExcel();        //如果excel文件后缀名为.xls,导入这个类        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();        }         //var_dump($PHPReader);die;        //载入文件        $PHPExcel=$PHPReader->load($filename);        //获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推        $currentSheet=$PHPExcel->getSheet(0);        //获取总列数        $allColumn=$currentSheet->getHighestColumn();        //获取总行数        $allRow=$currentSheet->getHighestRow();        //循环获取表中的数据,$currentRow表示当前行,从哪行开始读取数据,索引值从0开始        for($currentRow=1;$currentRow<=$allRow;$currentRow++){            //从哪列开始,A表示第一列            for($currentColumn='A';$currentColumn<=$allColumn;$currentColumn++){                //数据坐标                $address=$currentColumn.$currentRow;                //读取到的数据,保存到数组$arr中                $data[$currentRow][$currentColumn]=$currentSheet->getCell($address)->getValue();            }         }        $this->save_import($data);    }
复制代码

用上面这个方法获得excel里的数据,然后用save_import把获得的数据存入数据库

复制代码
//保存导入数据    public function save_import($data)    {        //print_r($data);exit;         $bath = M('data');                 //插入新数据时先清空原表数据,没有这个需要可以注释下面步骤        //M('mobile')->where('1=1')->delete();                 foreach ($data as $k=>$v){                //$mobile=$v['A'];   //注:****** (1)处                $info['a'] = $v['A'];                $info['b'] = $v['B'];                $info['c']=$v['C'];                $info['d_water']=$v['D'];                $info['e']=$v['E'];                $info['f']=$v['F'];                 $arr[] = $info;         }        $result=$bath->addall($arr);        if($result){            $this->success('数据导入成功');        }else{            $this->error('数据导入失败');        }        //print_r($info);    }
复制代码

导出相对于导入就容易的多,从数据库读出数据做出相应的处理

复制代码
public function excel(){        //引入PHPExcel库文件        Vendor('PHPExcel.Classes.PHPExcel');        //创建对象        $excel = new PHPExcel();        //Excel表格式,这里简略写了8列        $letter = array('A','B','C','D','E','F','F','G');        //表头数组        $tableheader = array('序号','客栈名称','客栈地址','座机','手机','QQ','邮箱');        //填充表头信息        for($i = 0;$i < count($tableheader);$i++) {            $excel->getActiveSheet()->setCellValue("$letter[$i]1","$tableheader[$i]");        }        //表格数组        $data = array(                array('1','B','C','D','E','F','G'),                array('2','B','C','D','E','F','G'),                array('3','B','C','D','E','F','G'),                array('4','B','C','D','E','F','G'),                array('5','B','C','D','E','F','G'),                array('6','B','C','D','E','F','G'),               array('7','B','C','D','E','F','G'),        );        //填充表格信息        for ($i = 2;$i <= count($data) + 1;$i++) {            $j = 0;            foreach ($data[$i - 2] as $key=>$value) {                $excel->getActiveSheet()->setCellValue("$letter[$j]$i","$value");                $j++;            }        }        //创建Excel输入对象        $write = new PHPExcel_Writer_Excel5($excel);        header("Pragma: public");        header("Expires: 0");        header("Cache-Control:must-revalidate, post-check=0, pre-check=0");        header("Content-Type:application/force-download");        header("Content-Type:application/vnd.ms-execl");        header("Content-Type:application/octet-stream");        header("Content-Type:application/download");;        header('Content-Disposition:attachment;filename="客栈信息.xls"');        header("Content-Transfer-Encoding:binary");        $write->save('php://output');    
0 0
原创粉丝点击