تبدیل آرایه به اکسل در لاراول

۲۲ خرداد ۱۳۹۷

طراحی سایت با لاراول

Laravel-Excel اخیرا بسته جدید نسخه 3.0 را منتشر کرد که تغییرات بسیار زیادی از نسخه های قبلی داشت. در زیر یک مثال ساده را مشاهده می کنیم:


namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromCollection;

class InvoicesExport implements FromCollection
{
    public function collection()
    {
        return Invoice::all();
    }
}

شما باید یک کلاس جداگانه برای export ایجاد کنید و شما می توانید collection را برای export تعریف کنید. راه های دیگری نیز برای export داده وجود دارد: از query:


class InvoicesExport implements FromQuery
{
    use Exportable;

    public function query()
    {
        return Invoice::query();
    }
}

از view html table می توانید به شکل زیر استفاده کنید:


class InvoicesExport implements FromView
{
    public function view(): View
    {
        return view('exports.invoices', [
            'invoices' => Invoice::all()
        ]);
    }
}

تصور کنید آرایه زیر را داریم:


[
  [
    'name' => 'Povilas',
    'surname' => 'Korop',
    'email' => 'povilas@laraveldaily.com',
    'twitter' => '@povilaskorop'
  ],
  [
    'name' => 'Taylor',
    'surname' => 'Otwell',
    'email' => 'taylor@laravel.com',
    'twitter' => '@taylorotwell'
  ]
]

چگونه می توان آرایه را به اکسل منتقل کرد:

گزینه 1. تبدیل آرایه خود به یک مجموعه و اضافه کردن عنوان ها

کلاس export ما به شکل زیر خواهد بود.


namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\WithHeadings;

class CollectionExport implements FromCollection, WithHeadings
{
    use Exportable;

    public function collection()
    {
        return collect([
            [
                'name' => 'Povilas',
                'surname' => 'Korop',
                'email' => 'povilas@laraveldaily.com',
                'twitter' => '@povilaskorop'
            ],
            [
                'name' => 'Taylor',
                'surname' => 'Otwell',
                'email' => 'taylor@laravel.com',
                'twitter' => '@taylorotwell'
            ]
        ]);
    }

    public function headings(): array
    {
        return [
            'Name',
            'Surname',
            'Email',
            'Twitter',
        ];
    }
}

شما با استفاده از متد collection و laravel collect، می توانید برای انتقال آرایه به آن استفاده کنید:


return Excel::download(new CollectionExport(), 'export.xlsx');

سپس شما این را به عنوان نتیجه دانلود دریافت می کنید:

طراحی سایت با لاراول

ارسال آرایه به ویو

شما می توانید به شکل زیر یک ویو بسازید:

سپس شما می توانید کلاس export خود را به شکل زیر بسازید:


namespace App\Exports;

use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;

class BladeExport implements FromView
{

    public function view(): View
    {
        return view('exports.xml', [
            'data' => [
              [
                'name' => 'Povilas',
                'surname' => 'Korop',
                'email' => 'povilas@laraveldaily.com',
                'twitter' => '@povilaskorop'
              ],
              [
                'name' => 'Taylor',
                'surname' => 'Otwell',
                'email' => 'taylor@laravel.com',
                'twitter' => '@taylorotwell'
              ]
            ]
        ]);
    }
}

کنترلر مثل قبل نوشته می شود فقط نام کلاس تغییر می کند:


return Excel::download(new BladeExport(), 'export.xlsx');

چگونگی ارسال داده به کلاس Export

شما با استفاده از dependency injection می توانید داده به کلاس export تزریق کنید. به مثال زیر توجه کنید:


class BladeExport implements FromView
{

    private $data;

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

    public function view(): View
    {
        return view('exports.xml', [
            'data' => $this->data
        ]);
    }
}

سپس از کلاس بالا به شکل زیر استفاده می کنیم:


$data = [
    [
        'name' => 'Povilas',
        'surname' => 'Korop',
        'email' => 'povilas@laraveldaily.com',
        'twitter' => '@povilaskorop'
    ],
    [
        'name' => 'Taylor',
        'surname' => 'Otwell',
        'email' => 'taylor@laravel.com',
        'twitter' => '@taylorotwell'
    ]
];

return Excel::download(new BladeExport($data), 'export.xlsx');

 نویسنده:حمید شاه محمدی
 تعداد مشاهده خبر:(590)
 هر روز از مقاله های جدید طراحی سایت در کانال تلگرام ما با خبر شوید

 میانگین امتیازات:
 
  تعداد رای دهندگان: {{ count }}
نظرات:

{{ x }}
{{ alert }}

نویسنده:{{ com.name }}
{{ com.body }}
{{ com.created_at }}