thinkphp uses PHPExcel to import and export

Currently, Excel export is used in many scenarios. Now, the implementation steps of the excel export function are explained in detail in conjunction with the ThinkPHP5.0 framework.

1-Preliminary preparations:

  • Download the PHPExcel package
  • Provide download address: https://github.com/helloworldmy007/PHPExcel
  • Put it under the vendor folder of our tp.

2- Import function realization

Front-end code display:

<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>

Need to introduce layui plug-in
js code

<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- background code

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- export function

Front-end code display:

<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- background code

//导出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;
    }

Guess you like

Origin blog.csdn.net/hgb24660/article/details/99696614