thinkphp使用PHPExcel的导入和导出

目前,很多场景下都在使用Excel导出,现在结合ThinkPHP5.0框架详细说明下excel导出功能的实现步骤。

1-前期准备工作:

  • 下载PHPExcel包
  • 提供下载地址:https://github.com/helloworldmy007/PHPExcel
  • 放到我们tp的vende文件夹下面。

2-导入功能实现

前台代码展示:

<form action="{:url('daoru')}" enctype="multipart/form-data" method="post">
	<div class="layui-upload">
  		<button type="button" class="layui-btn layui-btn-normal" id="test8">选择文件</button>
  		<button type="button" class="layui-btn" id="test9">开始导入到数据库</button>
	</div>
 </form>

需引入layui插件
js代码

<script>
    layui.use('upload', function(){
        var $ = layui.jquery
            ,upload = layui.upload;

        //选完文件后不自动上传
        upload.render({
            elem: '#test8'
            ,exts: 'xlsx|xls' //只允许上传压缩文件
            ,url: '/index.php/index/index/daoru'
            ,auto: false
            //,multiple: true
            ,bindAction: '#test9'
            ,done: function(res){
            console.log(res)
            if(res.code == 1) {
                layer.msg(res.msg, {'icon': 1});
                setTimeout(function () {
                    parent.window.location.reload();
                }, 1000);
            } else {
                layer.msg(res.msg);
            }

        }
    });

    });
</script>

3-后台代码

public function daoru(){
        if($this->request->isPost()){
            $file = $this->request->file('file');
            // 移动到框架应用根目录/public/uploads/ 目录下
            $info = $file->move(ROOT_PATH . 'public' .DS.'upload'. DS . 'excel');
            if($info){
                //获取文件所在目录名
                $path=ROOT_PATH . 'public' . DS.'upload'.DS .'excel/'.$info->getSaveName();
                //加载PHPExcel类
                vendor('PHPExcel.PHPExcel');
                //实例化PHPExcel类(注意:实例化的时候前面需要加'\')
                $extension = $info->getExtension();
                if($extension =='xlsx')
                {
                    $objReader = new \PHPExcel_Reader_Excel2007();
                }else
                {
                    $objReader = new \PHPExcel_Reader_Excel5();
                }
                $objPHPExcel = $objReader->load($path,$encode='utf-8');//获取excel文件
                $sheet = $objPHPExcel->getSheet(0); //激活当前的表
                $highestRow = $sheet->getHighestRow(); // 取得总行数
                $highestColumn = $sheet->getHighestColumn(); // 取得总列数
                $a=0;
                //将表格里面的数据循环到数组中
                for($i=2;$i<=$highestRow;$i++)
                {
                    //*为什么$i=2? (因为Excel表格第一行是标题,从第二行开始,才是我们要的数据。)
                    $data[$a]['id'] = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue();//id
                    $data[$a]['adminname'] = $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue();
                    $data[$a]['status'] = $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue();
                    $data[$a]['icon'] = $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();
                    $data[$a]['password'] = $objPHPExcel->getActiveSheet()->getCell("E".$i)->getValue();
                    $data[$a]['up_time'] = $objPHPExcel->getActiveSheet()->getCell("F".$i)->getValue();
                    $data[$a]['addtime'] = $objPHPExcel->getActiveSheet()->getCell("G".$i)->getValue();
                    $data[$a]['delete'] = $objPHPExcel->getActiveSheet()->getCell("H".$i)->getValue();
                    // 这里的数据根据自己表格里面有多少个字段自行决定
                    $a++;
                }
                //往数据库添加数据
                //dump($data);
                $aa = Db('admins')->insertAll($data);
                if($aa){
                    $res['code']=1;
                    $res['msg'] = '导入成功!';
                }else{
                    $res['code']=0;
                    $res['msg'] = '导入失败!';
                }
                return $res;
            }

        }
        return $this->fetch();
    }

4-导出功能

前台代码展示:

<form class="layui-form layui-col-md12 x-so" action="{:url('/index.php/index/index/daochu')}" method="get">
                <input type="text" name="fw_pici" value="{$fw_pici ? $fw_pici : '';}"  placeholder="请输入印刷批次"  class="layui-input">
                <button class="layui-btn"><i class="layui-icon">导出</i></button>
</form>

5-后台代码

//导出xls
    public function daochu(){
        //1.获取输入的批次,从数据库中取出数据
        $where =input('param.fw_pici');
        //halt($where);
        $list = Db('fangwei')->where('fw_pici','=',$where)->order('fw_id ASC')->select();
        //2.加载PHPExcle类库
        vendor('PHPExcel.PHPExcel');
        //3.实例化PHPExcel类
        $objPHPExcel = new \PHPExcel();
        //4.激活当前的sheet表
        $objPHPExcel->setActiveSheetIndex(0);
        //5.设置表格头(即excel表格的第一行)
        $objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', 'ID')
            ->setCellValue('B1', '防伪码')
            ->setCellValue('C1', '标签码');
        //设置A列水平居中
        $objPHPExcel->setActiveSheetIndex(0)->getStyle('A')->getAlignment()
            ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        //设置单元格宽度
        $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('A')->setWidth(10);
        $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('B')->setWidth(30);
        $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('C')->setWidth(30);
        //6.循环刚取出来的数组,将数据逐一添加到excel表格。
        for($i=0;$i<count($list);$i++){
            $objPHPExcel->getActiveSheet()->setCellValue('A'.($i+2),$list[$i]['fw_id']);//ID
            $objPHPExcel->getActiveSheet()->setCellValue('C'.($i+2),$list[$i]['fw_biaoqianma']);//标签码
            $objPHPExcel->getActiveSheet()->setCellValue('B'.($i+2),$list[$i]['fw_fangweima']);//防伪码
        }
        //7.设置保存的Excel表格名称
        $filename = '印刷防伪码'.date('ymd',time()).'.xls';
        //8.设置当前激活的sheet表格名称;
        $objPHPExcel->getActiveSheet()->setTitle('防伪码');
        //9.设置浏览器窗口下载表格
        header("Content-Type: application/force-download");
        header("Content-Type: application/octet-stream");
        header("Content-Type: application/download");
        header('Content-Disposition:inline;filename="'.$filename.'"');
        //生成excel文件
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        //下载文件在浏览器窗口
        $objWriter->save('php://output');
        exit;
    }

猜你喜欢

转载自blog.csdn.net/hgb24660/article/details/99696614
今日推荐