Laravel- 後臺批量匯入 Excel

lanffff發表於2019-05-31

最近做的一個H5網站 有一個後臺批量錄入資訊列表的功能,上網搜尋了一下,發現了maatwebsite/excel 依賴,在此說明一下具體的實現流程。
1.安裝
值得一提的是本人使用的是laravel 5.5版本,在安裝依賴的時候一定注意要加上版本號2.1。因為最新版本在5.5上面會有報錯提示。
a.在根目錄安裝依賴
composer require "maatwebsite/excel:~2.1.0"
b.在config/app.php中註冊服務提供者到providers陣列:
Maatwebsite\Excel\ExcelServiceProvider::class,
c.在config/app.php中註冊到aliases陣列:
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
d.生成Laravel Excel的配置檔案:
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
2.實現
因為我後臺使用的是layui框架,自帶一鍵匯出功能,所以在只說一下excel的匯入功能。以本人的程式碼為例。

     //批量匯入
     use Excel;
    public function import(Request $req){
        try {
            //獲取上傳的excel檔案
            $filePath = $req->get('report');
        Excel::load($filePath, function($reader) {
            $data = $reader->all();
            //批量儲存
            $value=[];
            $count = '';
             foreach ($data as $k => $v ){
                 $count++;
                 //儲存表格每行的值
                 $value['value1']=$v['行1'];
                 $value['value2']=$v['行2'];
                 $value['value3']=$v['行3'];
                 $value['value4']=$v['行4'];
                 $value['value5']=$v['行5'];
                 Adver::create($value);
             }
             //返回匯入結果
            throw new Exception("成功匯入了".$count."條資料");
        });
        }catch(Exception $e){
            return $this->doFailure($e);
        }
    }
 以上就是在laravel框架實現,批量匯入excel並存入資料庫的實現方式。
 3.匯出Excel(補充)
    首先建立路由:
     `  Route::get('/admin/export','Admin\AdverController@export');`
     以本人的程式碼為例,以下是具體的實現流程:
      ```
      //一鍵匯出
public function export(Request $req){
    try {
        ini_set('memory_limit','500M');
        //設定超時限制為0分鐘
        set_time_limit(0);
        //獲取資料庫資料
        $cellData = P_rank::select('user_name','t_all','all_time')->orderBy('t_all', 'DESC')->orderBy('all_time', 'ASC')->get()->toArray();
        //整合資料
        $cellData[0] = array('暱稱','總答題數','總答題時間');
        for($i=0;$i<count($cellData);$i++){
            $cellData[$i] = array_values($cellData[$i]);
            $cellData[$i][0] = str_replace('=',' '.'=',$cellData[$i][0]);
        }
        //輸出excel
        Excel::create('排行榜資訊',function($excel) use ($cellData){
            $excel->sheet('score', function($sheet) use ($cellData){
                $sheet->rows($cellData);
            });
        })->export('xls');
        die;

    }catch(Exception $e){
        return $this->doFailure($e);
    }
}
 ```
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章