Export Excel trong Laravel

1. Giới thiệu

Trong một ngày đẹp trời sáng có nắng và tối có sao, Tôi được ông anh bảo: "Ê ku làm cho a cái task export file .csv trên laravel 6. Làm sao cho sịn vào nhé". Đấy thế là một thằng newbie như tôi thì có hiểu được export là gì đâu? Thế là công cuộc thần thánh google search bắt đầu.

2. Export là gì ? Export bằng gì ?

  1. Export là gì ?

    Như đã nói như trên, tôi chả biết export là gì ? Và tôi đi hỏi a/c google.

    Hiểu nôm na thì export là xuất data ra 1 file excel.

  2. Export bằng gì ?

    Như yêu cầu tôi sẽ phải export file .csv trên laravel 6. Và vẫn như cũ tôi lại lên gg tìm kiếm.Và tôi đã tìm thấy 1 package rất là sịn sò để tôi có thể hoàn thành công việc được giao. Và package đó không gì khác ngoài là maatwebsite/excel 😄

3. Cài đặt package

  1. Cài package này bằng composer với lệnh sau :

composer require maatwebsite/excel

  1. Trong config/app.php thêm vào providers

'providers' => [ /* * Package Service Providers... */ Maatwebsite\Excel\ExcelServiceProvider::class, ]

  1. Trong config/app.php thêm vào aliases

'aliases' => [ ... 'Excel' => Maatwebsite\Excel\Facades\Excel::class, ]

  1. Để publish config, chạy vendor publish command:

php artisan vendor:publish

Lệch này có tác dụng copy file config của maatwebsite/excel từ trong folder config ra ngoài. File mới này là file config/excel.php

4. Export bằng maatwebsite/excel

  • Đầu tiên thì ta phải khởi tạo 1 đối tượng export bằng lệnh sau :

php artisan make:export TestExport

Và giờ ta đã có 1 file TestExport.php và trông nó sẽ như thế này

  1. Lấy ra data để export: Mặc định cmd đã tạo mới cho ta 1 class TestExport được implements FromCollection . Trong đó collection đã được định nghĩa trong interface FromCollection có nhiệm vụ là trả về 1 data có kiểu dữ liệu là collection. Bạn có thể viết query gì ở đây cũng được miễn là nó phải trả về 1 collection là được.

VD: return User:all();

  1. Set headers , map:
  • Như đã nói ở trên, package maatwebsite/excel hỗ trợ tận răng mọi thứ để export và trong đó có cả set header. Đầu tiên ta thêm implements WithHeadings, tiếp đó thêm function headings vào
/**
     * Set header columns
     *
     * @return array
     */
    public function headings(): array
    {
        return [
            'id'
            'name',
        ];
    }

Đấy thế là ta đã có header cho file export rồi. Tiếp đến là set value cho từng column. Tương tự collectionheadings ta tiếp tục implements WithMapping và thêm mới function map vào.

 /**
     * Mapping data
     *
     * @return array
     */
    public function map($bill): array
    {
        return [
            $user->id,
            $user->name,
        ];
    }

Và thế là gần hết..! Việc cuối cùng là thêm mới routercontroller để export thôi 😄

5. Tạo router, controller

  • Ta thêm mới route sau vào file routes\web.php

Route::get('export', '[email protected]')->name('export');

  • Tạo mới controller bằng cmd

php artisan make:controller ExportController

Mở file ExportController và thêm đoạn code sau đây vào nhé

Giải thích 1 chút nhé. Đầu tiên ta sẽ để export ta cần use class App\Exports\TestExport ta đã khởi tạo ở trên và Maatwebsite\Excel\Facades\Excel. Sau đó tạo mới function export . Funciton này sẽ gọi đến Excel::dowload(object $export, string $fileName). Thay giá trị vào và ta có Excel::download(new TestExport(), 'orders.xlsx');. Và cuối cùng, chỉ cần vào đường dẫn ta đã khải báo trong route rồi bùm. Chức năng export hoàn thành (yeah3).

6. Kết luận

Tôi vừa giới thiệu với các bạn cách xây dựng chức năng export trong laravel rồi đấy. Tuy chưa được quá chi tiết. Nhưng cũng khá là cơ bản và đầy đủ để có thể export rồi đấy 😄. Xin cảm ơn và hẹn gặp lại vào bài viết tiếp theo nhé =)).


All Rights Reserved