ایده پردازان جوان

مرجع بروزترین آموزش ها در زمینه مهندسی کامپیوتر

پیشنهاد شگفت انگیز سایت

خرید آموزش ساخت اپلیکیشن درخواست تاکسی مشابه اسنپ با 60 درصد تخفیف

خرید پکیج ویژه ساخت فروشگاه اینترنتی مشابه دیجی کالا به همراه نسخه اندروید با لاراول با 70 درصد تخفیف

آموزش کار با اکسل در laravel

در این مقاله می خواهیم به بررسی کار با پکیج Laravel Excel بپردازیم

از این پکیج می توانیم برای ثبت اطلاعات از طریق فایل اکسل یا دریافت خروجی اطلاعات در قالب فایل اکسل استفاده کنیم

برای شروع کار لازم هست یک پروژه جدید با استفاده از لاراول را ایجاد و تنظیمات اتصال به دیتابیس آن را انجام دهیم

جهت نصب پکیج می توانیم از دستور زیر استفاده کنیم

composer require maatwebsite/excel

با توجه به اینکه ما باید رکورد های در جدولی که میخوایم از محتوای آن خروجی اکسل دریافت کنیم داشته باشیم از طریق اجرا کد زیر با استفاده از قابلیت Factories لاراول اطلاعاتی تستی در جدول users ثبت میکنیم

Route::get('createData',function (){

    factory(App\User::class,50)->create();

});

با استفاده از ابزار Tinker لاراول نیز می توانیم کد های بالا را اجرا کنیم

توجه داشته باشید که هیچ الزامی برای ثبت اطلاعاتی تستی وجود ندارد و صرفا برای اینکه رکورد هایی در جدول برای دریافت خروجی (فایل اکسل) داشته باشیم اطلاعات تستی ثبت کردیم

در گام بعدی با اجرای کد زیر میتواینم کلاس لازم برای export اطلاعات را ایجاد کنیم

 php artisan make:export UsersExport --model=User

کلاس ایجاد شده بعد از اجرای کد بالا

<?php

namespace App\Exports;

use App\User;
use Maatwebsite\Excel\Concerns\FromCollection;

class UsersExport implements FromCollection
{
    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        return User::all();
    }
}

توسط متد collection میتوانیم مشخص کنیم که چه سطرهایی از جدول users انتخاب شود و با اضافه کردن شرط می توانیم برخی از سطر های جدول users را فیلتر کنیم

public function collection()
{
    return User::OrderBy('id','DESC')->limit(10)->get();
}

برای نمونه در کد های بالا فقط اطلاعات 10 کاربر اخر را انتخاب کردیم (تا اطلاعات آن را در قالب فایل اکسل دریافت کنیم)

توجه داشته باشین که اگر در اجرای دستور php artisan make:export UsersExport لایه مدل معرفی نشود (model=User--) در این صورت باید متد collection را خودمان تکمیل کنیم

در نهایت یک مسیر جدید برای export ایجاد میکنیم مشابه کد های زیر

Route::get('export',function (){

    return Excel::download(new \App\Exports\UsersExport(), 'users.xlsx');
    
});

با اجرا شدن مسیر export یک فایل اکسل با نام users.xlsx برای دانلود ارسال میشود که شامل اطلاعات 10 سطر آخر جدول users می باشد

در صورتی که بخواهیم مشخص کنیم که هر ستون مربوط به کدام فیلد جدول users هست می توانیم از اینترفیس WithHeadings استفاده و اسم هر ستون را از طریق متد headings وارد کنید مشابه کد های زیر

<?php

namespace App\Exports;

use App\User;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;

class UsersExport implements  FromCollection,WithHeadings
{
    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        return User::OrderBy('id','DESC')->limit(10)->get();
    }

    /**
     * @return array
     */
    public function headings(): array
    {
       return [
           'id',
           'name',
           'email',
           'email_verified_at',
           'created_at',
           'updated_at'
       ];
    }
}

خروجی کد های بالا

در صورتی که بخواهیم در مقادیر نمایش داده شده نیز تغییر ایجاد کنیم میتوانیم از اینترفیس WithMapping و متد map استفاده کنیم

مطابق کد های زیر

<?php

namespace App\Exports;

use App\User;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;

class UsersExport implements  FromCollection,WithHeadings,WithMapping
{
    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        return User::OrderBy('id','DESC')->limit(10)->get();
    }

    /**
     * @return array
     */
    public function headings(): array
    {
       return [
           'id',
           'name',
           'email',
           'email_verified',
           'created_at',
           'updated_at'
       ];
    }

    /**
     * @param mixed $row
     *
     * @return array
     */
    public function map($row): array
    {
       return
           [
              $row->id,
              $row->name,
              $row->email,
              $active=(is_null($row->email_verified_at)) ? 'No':'Yes',
              $row->created_at,
              $row->updated_at
           ];
    }
}



در کد های بالا برای مقدار email_verified_at که زمان تایید ایمیل را نمایش میدهد بررسی شده اگر مقدار آن null باشد مقدار No نمایش برگردانده شود در غیر این صورت مقدار Yes

علاوه بر این می توانیم تاریخ میلادی ثبت شده را به تاریخ شمسی تبدیل کنیم و... تا فایل با اطلاعات مور نیاز ساخته شود

خروجی اجرای کد های بالا

توسط متد download فایل اکسل ساخته شده و برای دانلود ارسال می شود ولی این فایل جایی از سایت ذخیره نمی شود در صورتی که بخواهیم فایل اکسل را ذخیره کنیم میتوانیم از متد store استفاده کنیم

Route::get('export',function (){

    Excel::store(new \App\Exports\UsersExport(), 'users.xlsx');
    return 'done';
});

با اجرای کد بالا فایل users.xlsx در مسیر storage/app ذخیره می شود

ورودی سوم متد store محل ذخیره شدن فایل را مشخص میکند که به صورت پیش فرض مقدار آن برابر با local هست ولی می توانیم از سایر disk ها مانند (local,s3,ftpو...) که در فایل config/filesystems.php تعریف شده استفاده کنیم

می توانید با فرمت های مختلف از اطلاعات خروجی دریافت کنیم

Excel::download(new \App\Exports\UsersExport(), 'users.xlsx');
Excel::download(new \App\Exports\UsersExport(), 'users.xls');
Excel::download(new \App\Exports\UsersExport(), 'users.csv');
Excel::download(new \App\Exports\UsersExport(), 'users.tsv');

 

در حال دریافت اطلاعات