1. 程式人生 > 實用技巧 >laravel maatwebsite/excel 匯出Excel

laravel maatwebsite/excel 匯出Excel

1、首先檢視vendor 資料夾中有沒有maatwebsite/excel 依賴,若沒有在專案根目錄下使用Composer安裝依賴

composer require "maatwebsite/excel:~2.1.0"

2、config/app.php中註冊服務提供者到providers陣列

Maatwebsite\Excel\ExcelServiceProvider::class,

 在config/app.php中註冊門面到aliases陣列

'Excel' => Maatwebsite\Excel\Facades\Excel::class,

 如果想要對Laravel Excel進行更多的自定義配置,執行如下Artisan命令

php artisan vendor:publish

 執行成功後會在config目錄下生成一個配置檔案excel.php

3、匯出 Excel 檔案

建立ExcelController.php

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Foundation\Application;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Artisan;
use App\Models\Member;
use App\Models\SpecialSubject; use Excel; use PHPExcel_Worksheet_Drawing; class ExcelController extends Controller { public function export(Request $request){ ini_set('memory_limit','500M'); set_time_limit(0);//設定超時限制為0分鐘 $info = Member::select('avatar','nickname','gender','wx_country','wx_province','wx_city','realname','mobile','company_name','email','is_news','industry','position','province','city','region','is_access','interest','is_enroll','prev_path')->get()->toArray();
foreach($info as $k=>$v){ $kk = $k + 1; // $cellData[$kk]['avatar'] = $v['avatar']; $cellData[$kk]['nickname'] = $v['nickname']; if($v['gender'] == 2){ $cellData[$kk]['gender'] = '女'; }else{ $cellData[$kk]['gender'] = '男'; } $cellData[$kk]['diqu'] = $v['wx_country'].' '.$v['wx_province'].' '.$v['wx_city']; $cellData[$kk]['realname'] = $v['realname']; $cellData[$kk]['mobile'] = $v['mobile']; $cellData[$kk]['company_name'] = $v['company_name']; $cellData[$kk]['email'] = $v['email']; if($v['is_news'] == 1){ $cellData[$kk]['is_news'] = '是'; }else{ $cellData[$kk]['is_news'] = '否'; } $cellData[$kk]['industry'] = $v['industry']; $cellData[$kk]['position'] = $v['position']; $cellData[$kk]['company_address'] = $v['province'].$v['city'].$v['region']; if($v['is_access'] == 1){ $cellData[$kk]['is_access'] = '是'; }else{ $cellData[$kk]['is_access'] = '否'; } $ids = explode(',',$v['interest']); $list = SpecialSubject::whereIn('id',$ids)->get(['id','title','short'])->toArray(); $name = []; foreach($list as $vv){ $name[] = $vv['title'].$vv['short']; } $cellData[$kk]['interest'] = implode(',',$name); if($v['is_enroll'] == 1){ $cellData[$kk]['is_enroll'] = '是'; }else{ $cellData[$kk]['is_enroll'] = '否'; } $cellData[$kk]['prev_path'] = $v['prev_path']; } // 設定表頭 $cellData[0] = array('使用者名稱','性別','地區','姓名','手機號','公司名稱','公司郵箱','是否接收資訊更新','所屬行業','職位','公司所在地','是否已接入穿山甲','感興趣的話題','是否報名','補全資料的前一個路徑'); // 把需要匯出的資料遍歷成一個數組 for($i=0;$i<count($cellData);$i++){ $cellData[$i] = array_values($cellData[$i]); $cellData[$i][0] = str_replace('=',' '.'=',$cellData[$i][0]); } // dd($cellData);exit; // 建立匯出excel 表格 Excel::create('使用者資訊',function($excel) use ($cellData){ $excel->sheet('score', function($sheet) use ($cellData){ // init列 $title_array = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H','I', 'J', 'K', 'L','M', 'N', 'O', 'P']; // 遍歷資料 for($i=0;$i<sizeof($cellData);$i++){ foreach($cellData[$i] as $k=>$v){ // 設定圖片列高度 /* $i>0 && $sheet->setHeight($i+1, 65); */ // 設定圖片列寬度 /* $sheet->setWidth(array('F'=>12)); */ // 圖片放在第三列,列是從0開始的 // 判斷圖片列,如果是則放圖片 /* if($k == 0 && $i>0){ $objDrawing = new PHPExcel_Worksheet_Drawing; // 圖片的路徑 // $objDrawing->setPath(storage_path('/app/public/uploads/').$v); $objDrawing->setPath($v); $objDrawing->setCoordinates($title_array[$k] . ($i+1)); $objDrawing->setHeight(80); $objDrawing->setOffsetX(1); $objDrawing->setRotation(1); $objDrawing->setWorksheet($sheet); continue; } */ // 否則放置文字資料 $sheet->cell($title_array[$k] . ($i+1), function ($cell) use ($v) { $cell->setValue($v); }); } } ob_end_clean(); }); })->export('xls'); } }

定義相關路由,在瀏覽器訪問即可;

匯出資料如圖: