Hướng dẫn php export to csv - xuất php sang csv

Mở đầu

    Hiện nay việc code và xuất dữ liệu đã khá phổ biến, các dạng file PDF, CSV, XLS và mỗi lần chúng ta có yêu cầu xuất file thì phải tìm khắp nơi các thư viện, hoặc code tay..Hôm nay mình xin giới thiệu và cùng mọi người tìm hiểu một thư viện có thể dùng xuất nhiều dạng file mình mong muốn..cụ thể mình dùng cho framework laravel php.

Nội dung

1. Cài đặt

    Bạn di chuyển vào projiect và dùng composer để cài đặt thư viện

composer require maatwebsite/excel

    Khi cài xong thì bước tiếp theo vào

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
0 và thêm vào file
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
1

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

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

    Rồi sau đó từ terminal chúng ta publish config vừa rồi

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

    Sau khi publish thành công nó sẽ tạo ra một file config excel trong

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
2 và đến đây mình đã cài đặt xong..giờ sẽ dùng nó nhé

2. Một ví dụ đơn giản

    Đầu tiên ta tạo ra một class export

php artisan make:export PostsExport --model=Post

    Bạn có thể thấy file này nằm ở

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
3 và nơi đây chính là nơi bạn tùy chỉnh file excel hoặc csv ... của mình



namespace App\Exports;

use App\Post;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;

class PostsExport implements FromCollection, WithHeadings
{
    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        return Post::all();
    }

    public function headings(): array
    {
        return [
            '#',
            'title',
            'body',
            'created_at',
            'updated_at',
        ];
    }
}

    và Controller



namespace App\Http\Controllers;

use App\Exports\PostsExport;
use App\Post;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;

class PostController extends Controller
{
    public function exportCSV()
    {
       return Excel::download(new PostsExport, 'post.csv');
    }
}

    Bạn cũng có thể lưu lại trên server

return Excel::store(new PostsExport, 'post.csv');

Lưu ý: đối với lưu thì tên file bao gồm cả đường dẫn và nó đc lưu tại

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
4 vì vậy bạn muốn lưu vào đâu thì hãy thêm
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
5 chuẩn nhé.

    Kết quả khi mình xuất file CSV

Hướng dẫn php export to csv - xuất php sang csv

trên là mình thực hiện lưu hoặc xuất thẳng file CSV ra một cách đơn giản..Giờ mình đi nghịch xem nó thế nào một chút nhé.

3. Một chút custom

    Giờ ta muốn truyền tham số và xuất một file theo số truyền vào nha..ở đây mình truyền và xuất ra file csv có chứa

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
6 mình truyền vào thôi...mà mình k thích viết logic trong file
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
7 cho lắm nên mình sẽ tạo và viết trong file
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
8 nha.

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



namespace App\Exports;

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

class PostsExport implements FromCollection, WithHeadings
{
    /**
    * @return \Illuminate\Support\Collection
    */
    protected $id;
    public function __construct($id)
    {
        $this->id = $id;
    }

    public function collection()
    {
        $postService = app()->make('App\PostService');
        $post = $postService->getPostById($this->id);
        return $post;
    }

    public function headings(): array
    {
        return [
            '#',
            'title',
            'body',
            'created_at',
            'updated_at',
        ];
    }
}

php artisan make:export PostsExport --model=Post
0



namespace App\Http\Controllers;

use App\Exports\PostsExport;
use App\Post;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;

class PostController extends Controller
{
    public function exportCSV(Request $request)
    {
        if ($id = $request->all('id')) {
            return Excel::download(new PostsExport($id), 'post.csv');
        }

    }
}

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


namespace App;

class PostService
{
    public function getPostById($id)
    {
        return Post::find($id);
    }
}

và kết quả chúng ta nhận được này

    Trên đây là custom một chút..mình có thể custom nhiều hơn.     Một ví dụ nữa đó là mình thay vào việc export dữ liệu từ collection thì mình cũng có thế export từ mảng..đơn giản là ta cho mảng đó vào

php artisan make:export PostsExport --model=Post
2 của thư viện là được.

 public function collection()
    {
        $postService = app()->make('App\PostService');
        $post = $postService->getPostById($this->id);
        //post is an Array
        return collect($post);
    }

3. Kết luận

    Qua bài viết hi vọng giúp các bạn yêu thích hơn việc code..vì rất nhiều điều thú vị..Qua bài trên giúp bạn có hướng đi khi gặp phải task liên quan tới phần export này.

4. Tài liệu tham khảo

document export