一、如果是laravel5.8那麼自動會安裝最新的3.1的包
composer require maatwebsite/excel
如果你的laravel版本是5.5那麼安裝下面的2.1.0版本的包還可以用,
步驟1、composer 運行下面命令安裝
composer require "maatwebsite/excel:~2.1.0"
如果本地安裝提示:
報上面錯的話 執行:
COMPOSER_MEMORY_LIMIT=-1 composer require "maatwebsite/excel:~2.1.0"
二、下面步驟2和3不管什麼版本,閉着眼都要添加
步驟2、打開laravel項目中的config/app.php文件,添加以下兩處
//providers元素添加
Maatwebsite\Excel\ExcelServiceProvider::class,
//aliases元素添加
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
步驟3、發送配置文件(執行後會自動生成一個配置文件config/excel.php)
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
三、maatwebsite/excel:~3.1.0的包導出代碼
php artisan make:export UsersExport --model=User
控制器中導出,這樣默認導出模型對應的表的數據
use App\Exports\UsersExport;
use Maatwebsite\Excel\Facades\Excel;
use App\Http\Controllers\Controller;
class UsersController extends Controller
{
public function export()
{
return Excel::download(new UsersExport, 'users.xlsx');
}
}
但是一般我們要導出的可能不止單表的數據,那麼通常我們會先查詢組合好數據格式(二維數組) ,然後導出。
生成導出文件app/Exports/TestExport
php artisan make:export TestExport
如圖:
複製下面代碼,編輯TestExport.php文件
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
class TestExport implements FromCollection
{
// 要導出的數據
public $data;
public function __construct(array $data)
{
$this->data = $data;
}
/**
* @return \Illuminate\Support\Collection
*/
public function collection()
{
return collect($this->data);
}
}
控制器中代碼如下:
public function export(Request $request)
{
$cellData[] = ['學號','姓名','成績'];
$list = [
['10001','AAAAA','99'],
['10002','BBBBB','92'],
['10003','CCCCC','95'],
['10004','DDDDD','89'],
['10005','EEEEE','96'],
];
if ($list) {
$cellData = array_merge($cellData, $list);
}
//此時打印出結果如下
// $data = [
// ['學號','姓名','成績'],
// ['10001','AAAAA','99'],
// ['10002','BBBBB','92'],
// ['10003','CCCCC','95'],
// ['10004','DDDDD','89'],
// ['10005','EEEEE','96'],
// ];
// $data = [
// // ...
// ];
// download 方法直接下載,store 方法可以保存。具體的導出類型等看官方的文檔吧
$obj = new TestExport($cellData);
return Excel::download($obj, 'test文件名稱.xls');//***文件名
}
訪問路由, 成功下載excel文件!完成。
三、maatwebsite/excel:~2.1.0的包導出代碼
4、開始測試導出
- 控制器引入Excel
貼代碼:
/*
* 後端直接導出excel
*/
public function export(Request $request)
{
$cellData[] = ['學號','姓名','成績'];
$list = [
['10001','AAAAA','99'],
['10002','BBBBB','92'],
['10003','CCCCC','95'],
['10004','DDDDD','89'],
['10005','EEEEE','96'],
];
if ($list) {
$cellData = array_merge($cellData, $list);
}
//此時打印出 $cellData 結果如下
// $data = [
// ['學號','姓名','成績'],
// ['10001','AAAAA','99'],
// ['10002','BBBBB','92'],
// ['10003','CCCCC','95'],
// ['10004','DDDDD','89'],
// ['10005','EEEEE','96'],
// ];
Excel::create( 'Excel表名字',function ($excel) use ($cellData){
$excel->sheet('score', function ($sheet) use ($cellData){
$sheet->rows($cellData);
});
})->export('xlsx');
# 如果導出中午亂碼用下面的
// Excel::create(iconv('UTF-8', 'GBK', 'Excel表名字'),function ($excel) use ($cellData){
// $excel->sheet('score', function ($sheet) use ($cellData){
// $sheet->rows($cellData);
// });
// })->export('xlsx');
}