1分鐘實現 後端接口直接導出excel --php --laravel

一、如果是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');
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章