thinkphp5封装导入excel和导出excel

开发中有时候要做excel的导入导出功能,而thinkphp5有其封装的导入方法,十分方便,下面说下怎么使用。
首先,要下载一下phpExcel,这个大家就自己到百度上面下载,一搜索就会有的了,下载后解压出来是这样的
这里写图片描述
然后将文件夹复制到项目中的vendor下
这里写图片描述
好了,引入文件后,准备工作也就完成了,下面是如何使用,首先是导入excel,这里用的是tp5封装的方法,十分方便,首先前端按钮连接接口
这里写图片描述
然后导入方法如下

    //导入excel
    public function excel(){
        $request = \think\Request::instance();
        $excel = request()->file('excel')->getInfo();//excel为file中的name
        vendor("PHPExcel.PHPExcel.IOFactory");
        $objPHPExcel = \PHPExcel_IOFactory::load($excel['tmp_name']);//读取上传的文件
        $arrExcel = $objPHPExcel->getSheet(0)->toArray();//获取其中的数据
$word = $arrExcel[0];
array_shift($arrExcel);

        $data = array();
        $num = count($arrExcel) -1;
     foreach ($arrExcel as $key => $value) {

         $data[] = array(
            'company_name'=>$arrExcel[$key][0]
            );

     }

     $result = Db::table('ag_company')->insertAll($data);
    if($result){
        $this->success('导入成功');
    }else{
        $this->error('导入失败');
    }
    }

excel表如下
这里写图片描述
返回的数组
这里写图片描述
到这里数组出来后就自己自行处理吧,鉴于有时候可能不会用tp框架,所以下面也附上原生的导入excel代码,让大家可以参考一下
前端:
这里写图片描述
后台方法:

    function readxml(){


        global $smarty,$config,$db,$manage_ur,$admin_url;

        header("content-type:text/html; charset=utf-8");
        include_once(ROOT_PATH."plugins/PHPExcel/IOFactory.php");

        $tmp_file = $_FILES ['xls'] ['tmp_name']; //临时文件


        $name = $_FILES['xls']['name'];   //上传文件名
        $reader = PHPExcel_IOFactory::createReader('Excel5'); //设置以Excel5格式(Excel97-2003工作簿)

        $PHPExcel = $reader->load($tmp_file, 'utf-8'); // 载入excel文件
        $sheet = $PHPExcel->getSheet(0); // 读取第一個工作表
        $highestRow = $sheet->getHighestRow(); // 取得总行数
        $highestColumm = $sheet->getHighestColumn(); // 取得总列数

        $data = array();
        for ($rowIndex = 1; $rowIndex <= $highestRow; $rowIndex++) {        //循环读取每个单元格的内容。注意行从1开始,列从A开始
            for ($colIndex = 'A'; $colIndex <= $highestColumm; $colIndex++) {
                $addr = $colIndex . $rowIndex;
                $cell = $sheet->getCell($addr)->getValue();
                if ($cell instanceof PHPExcel_RichText) { //富文本转换字符串
                    $cell = $cell->__toString();
                }
                $data[$rowIndex][$colIndex] = $cell;
            }
        }

        $company_id=$_SESSION['company_id'];
        $access_token=get_corp_token($company_id);

            // echo count($data);
        for ($i=1;$i<count($data);$i++){
            $salersman_name=$data[$i+1]['A'];
            $job=$data[$i+1]['B'];
            $weixin=$data[$i+1]['C'];
            $phone=$data[$i+1]['D'];
            $department=$data[$i+1]['E'];

            $user_data['userid']=$company_id."-".$phone;
            $user_data['name']=$salersman_name;
            $user_data['mobile']=$weixin;
            $user_data['position']=$job;
            $user_data['department']=$department;

            $err=createuser($access_token,$user_data);
        //     //添加到数据库
        $udata=array(
            'salersman_name'=>$salersman_name,
            'job'=>$job,
            'weixin'=>$weixin,
            'phone'=>$phone,
            'company_id'=>$company_id,
            'department_id'=>$department_id,
            );
               //插入
         $udata['add_time']=time();
         $db->autoExecute("{$config->db_prefix}salersman_info", $udata);
        }

        $links[0]['text'] = "返回";
        $links[0]['href'] = $admin_url.'/qiyewx/staffmanage';


        exit();
    }

再下面说导出excel的方法,首先前端:
这里写图片描述
导出excel方法:

    //导出excel
    public function outexcel(){
         //导出
        $path = dirname(__FILE__); //找到当前脚本所在路径
        vendor("PHPExcel.PHPExcel.PHPExcel");
        vendor("PHPExcel.PHPExcel.Writer.IWriter");
        vendor("PHPExcel.PHPExcel.Writer.Abstract");
        vendor("PHPExcel.PHPExcel.Writer.Excel5");
        vendor("PHPExcel.PHPExcel.Writer.Excel2007");
        vendor("PHPExcel.PHPExcel.IOFactory");
        $objPHPExcel = new \PHPExcel();
        $objWriter = new \PHPExcel_Writer_Excel5($objPHPExcel);
        $objWriter = new \PHPExcel_Writer_Excel2007($objPHPExcel);


        // 实例化完了之后就先把数据库里面的数据查出来
        $sql = Db::table('ag_company')->select();

        // 设置表头信息
        $objPHPExcel->setActiveSheetIndex(0)
        ->setCellValue('A1', 'id')
        ->setCellValue('B1', '商户名称');

         /*--------------开始从数据库提取信息插入Excel表中------------------*/

        $i=2;  //定义一个i变量,目的是在循环输出数据是控制行数
        $count = count($sql);  //计算有多少条数据
        for ($i = 2; $i <= $count+1; $i++) {
            $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $sql[$i-2]['id']);
            $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $sql[$i-2]['company_name']);
        }

          /*--------------下面是设置其他信息------------------*/

        $objPHPExcel->getActiveSheet()->setTitle('companyInformation');      //设置sheet的名称
        $objPHPExcel->setActiveSheetIndex(0);                   //设置sheet的起始位置
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');   //通过PHPExcel_IOFactory的写函数将上面数据写出来

        $PHPWriter = \PHPExcel_IOFactory::createWriter( $objPHPExcel,"Excel2007");

        header('Content-Disposition: attachment;filename="商户信息表.xlsx"');
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');

        $PHPWriter->save("php://output"); //表示在$path路径下面生成demo.xlsx文件



    }

这里导出的excel表是这样的:
这里写图片描述
代码基本都是直接复制,然后改一下字段就可以了,十分方便。

猜你喜欢

转载自blog.csdn.net/weixin_42824337/article/details/81751077