maatwebsite/excel3.1 匯入Excel詳解

huliuwa發表於2021-02-01

最近用了maatwebsite/excel的匯入,找了很多文章都是2.1的,總結了一下3.1版本步驟

附上官方文件地址
laravel-excel/maatwebsite/excel文件

下面來說一下具體步驟,因為我只用到了ToCollection,所以就說下這個,後續有用到了會繼續更新
1.安裝composer包

composer require maatwebsite/excel

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

Maatwebsite\Excel\ExcelServiceProvider::class,

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

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

4.釋出 Laravel Excel 的配置檔案

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"

5.新建一個匯入檔案

php artisan make:import 檔名稱 --model=Model地址

此操作會在app/下建立一個Import目錄並建立一個檔案

.
├── app
│   ├── Imports
│   │   ├── CompanyUserImport.php
│ 
└── composer.json

我這裡需要匯入的資料需要自己處理一下,所以使用的ToCollection的方法

app/Import/CompanyUserImport.php程式碼如下

<?php

namespace App\Imports;

use App\Models\Company\CompanyUserModel;
use Maatwebsite\Excel\Concerns\ToCollection;
use Illuminate\Support\Collection;

class CompanyUserImport implements ToCollection
{
    /**
     * 使用 ToCollection
     * @param array $row
     *
     * @return User|null
     */
    public function collection(Collection $rows)
    {
        foreach ($rows as $row) 
        {
            // dump($row);
            // 處理資料
        }
        CompanyUserModelDB::insert($data);
    }

    public function createData($rows)
    {
        //todo
    }
}

控制器呼叫

<?php

namespace App\Http\Controllers\Company;


use Illuminate\Http\Request;
use App\Imports\CompanyUserImport;
use App\Http\Controllers\Controller;
use Maatwebsite\Excel\Facades\Excel;

class CompanyUserController extends Controller
{

    /**
     * excel批量匯入成員
     *
     * @param Request $request
     * @return void
     */
    public function importMember(Request $request)
    {

        Excel::import(new CompanyUserImport, request()->file('excelfile'));
    }
}

附上app/Import/CompanyUserImport.php中collection方法裡的dump效果

maatwebsite/excel3.1 匯入Excel詳解

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章