Laravel 如何實現 Excel 導入及導出功能


安裝依賴

首先使用Composer安裝依賴,在項目根目錄下執行:

composer require maatwebsite/excel

導出Excel文件

首先創建一個 export

php artisan make:export SchoolExport

該命令會在 app/Exports 創建 SchoolExport.php 文件。

數組形式導出

因為一般我們都是有選擇性的導出指定數據。所以這里需要用 FromArray 來實現。

<?php

namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromArray;

class SchoolExport implements FromArray
{
    protected $invoices;

    public function __construct(array $invoices)
    {
        $this->invoices = $invoices;
    }

    public function array(): array
    {
        // TODO: Implement array() method.
        return $this->invoices;
    }

}

然后直接在控制器中操作導出數據即可。

public function school()
{

    $sql = "select a.zwmc,a.id,a.szgj from gwdxyxk as a left join yu_school_ersanshi as b on a.id=b.s_ys_id where a.szgj='a0920192AD18538XLtaQ' and b.content1 is null and a.zwmc is not null";

    $res = DB::connection('mysql_crm')->select($sql);

    $arr = array_map(function ($value){
        return (array)$value;
    },$res);


    foreach ($arr as $k=>$v){
        $arr[$k]['url'] = "https://baike.baidu.com/item/".$v['zwmc'];
    }

    //因為要設置行名稱,所以講表頭合並到結果集的第一行
    $result = array_merge([[
        'zwmc',
        'id',
        'szgj',
        'url'
    ]],$arr);

    return Excel::download(new SchoolExport($result),'school.xlsx');
}

collection 導出

若你直接導出表中所有數據。則可以直接使用 collection:

<?php
namespace App\Exports;
use App\User;
use Maatwebsite\Excel\Concerns\FromCollection;
class UsersExport implements FromCollection
{
    public function collection()
    {
        return User::all();
    }
}

然后直接在控制器中操作導出數據即可。

<?php
namespace App\Http\Controllers;
use App\Exports\UsersExport;
use Maatwebsite\Excel\Facades\Excel;
class UsersController extends Controller
{
    public function export()
    {
        return Excel::download(new UsersExport, 'users.xlsx');
    }
}

針對數據太多,還支持隊列導出以及更多的導出格式。詳細請查看官方文檔

導入Excel文件

首先創建一個 import

php artisan make:import UsersImport --model=User

該命令會在 app/Imports 創建 UsersImport.php 文件。

<?php
namespace App\Imports;
use App\User;
use Illuminate\Support\Facades\Hash;
use Maatwebsite\Excel\Concerns\ToModel;
class UsersImport implements ToModel
{
    /**
     * @param array $row
     *
     * @return User|null
     */
    public function model(array $row)
    {
        return new User([
           'name'     => $row[0],
           'email'    => $row[1],
           'password' => Hash::make($row[2]),
        ]);
    }
}

然后直接在控制器中導出數據即可:

use App\Imports\UsersImport;
use Maatwebsite\Excel\Facades\Excel;
use App\Http\Controllers\Controller;
class UsersController extends Controller
{
    public function import()
    {
        Excel::import(new UsersImport, 'users.xlsx');
        return redirect('/')->with('success', 'All good!');
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM