1. 程式人生 > >thinkphp5封裝匯入excel和匯出excel

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表是這樣的:
這裡寫圖片描述
程式碼基本都是直接複製,然後改一下欄位就可以了,十分方便。