Import & Export file excel, xlsx, tsv, ods, xls…dễ dàng với thư viện Maatwebsite

export và import excel file một cách dễ dàng.

Laravel Excel được thiết kế như một phiên bản Laravel của PhpSpreadsheet. Đây là một class kế thừa và bổ sung cho PhpSpreadsheet để đơn giản hóa việc Export và Import dữ liệu từ các bảng tính. PhpSpreadsheet là một thư viện dựa trên PHP cho phép bạn đọc và ghi các định dạng tệp bảng tính khác nhau như Excel và LibreOffice Calc. Laravel Excel có những tính năng sau:

  • Dễ dàng xuất các bộ sưu tập thành tệp Excel.
  • Xuất các truy vấn với chia nhỏ tự động để tăng hiệu suất.
  • Xếp hàng đợi để tăng hiệu suất.
  • Dễ dàng xuất các giao diện Blade thành tệp Excel.
  • Dễ dàng nhập dữ liệu vào các bộ sưu tập.
  • Đọc tệp Excel theo từng phần.
  • Xử lý việc chèn dữ liệu nhập khẩu theo lô.

Nếu bạn muốn tạo chức năng Export và Import tệp Excel dễ dàng, hướng dẫn này là ý hay cho bạn.

Yêu cầu

  • PHP: ^7.2|^8.0
  • Laravel: ^5.8
  • PhpSpreadsheet: ^1.15
  • PHP extension php_zip enabled
  • PHP extension php_xml enabled
  • PHP extension php_gd2 enabled
  • PHP extension php_iconv enabled
  • PHP extension php_simplexml enabled
  • PHP extension php_xmlreader enabled
  • PHP extension php_zlib enabled

Bước 1: Cài đặt Dự án Laravel

Mở Terminal và chạy lệnh sau để tạo một dự án Laravel mới:

composer create-project --prefer-dist laravel/laravel laravel-excel

Hoặc, nếu bạn đã cài đặt Laravel Installer global composer:

laravel new laravel-excel

Bước 2: Cấu hình Chi tiết Cơ sở dữ liệu

Sau khi cài đặt xong, điều hướng đến thư mục gốc của dự án, mở tệp .env và đặt chi tiết cơ sở dữ liệu như sau:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=<TÊN CƠ SỞ DỮ LIỆU>
DB_USERNAME=<TÊN NGƯỜI DÙNG CƠ SỞ DỮ LIỆU>
DB_PASSWORD=<MẬT KHẨU CƠ SỞ DỮ LIỆU>

Bước 3: Cài đặt gói maatwebsite/excel

Cài đặt Laravel Excel qua composer bằng lệnh sau:

composer require maatwebsite/excel
Tiếp theo, đăng ký providersaliases. Mở tệp config/app.php và thêm đoạn mã sau:
'providers' => [
     Maatwebsite\Excel\ExcelServiceProvider::class,
],
'aliases' => [
     'Excel' => Maatwebsite\Excel\Facades\Excel::class,
],

 

Sau đó, thực thi lệnh để export cấu hình:

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config
Lệnh này sẽ tạo một tệp cấu hình mới tại config/excel.php.

Bước 4: Tạo dữ liệu giả và di chuyển bảng

Trong Bước 1, chúng ta sẽ di chuyển bảng users. Sau khi migration thành công, chúng ta sẽ tiếp tục Bước 2.

php artisan migrate

Trong Bước 2, chúng ta sẽ tạo dữ liệu giả. Sử dụng tinker để tạo dữ liệu giả trong cơ sở dữ liệu:

php artisan tinker

Trong tinker, chạy lệnh sau để tạo 100 bản ghi giả:

User::factory()->count(100)->create();

Bước 5: Tạo Route

Trong bước này, chúng ta sẽ thêm các route để xử lý yêu cầu export và import file

use App\Http\Controllers\UserController;

Route::get('/file-import',[UserController::class,'importView'])->name('import-view');
Route::post('/import',[UserController::class,'import'])->name('import');
Route::get('/export-users',[UserController::class,'exportUsers'])->name('export-users');

Bước 6: Tạo Lớp Import

Maatwebsite cung cấp một lệnh để tạo class Import và chúng ta sẽ sử dụng nó trong controller. Chạy lệnh sau để tạo class import và sửa code trong tệp tạo ra:

php artisan make:import ImportUser --model=User

app/Imports/ImportUser.php

<?php

namespace App\Imports;

use App\Models\User;
use Maatwebsite\Excel\Concerns\ToModel;

class ImportUser implements ToModel
{
   /**
   * @param array $row
   *
   * @return \Illuminate\Database\Eloquent\Model|null
   */
   public function model(array $row)
   {
      return new User([
         'name' => $row[0],
         'email' => $row[1],
         'password' => bcrypt($row[2]),
      ]);
   }
}

Ở đây, bạn có thể thấy cách ánh xạ giá trị cột CSV hoặc Excel vào Model Eloquent. Hãy định dạng cột CSV hoặc Excel theo cách bạn ánh xạ trong lớp nhập khẩu.

Bước 7: Tạo Lớp Export

Maatwebsite cung cấp một lênh Artisan để tạo class export và chúng ta sẽ sử dụng nó trong controller. Chạy lệnh sau để tạo class export và sửa code trong tệp tạo ra:

php artisan make:export ExportUser --model=User

app/Exports/ExportUser.php

<?php

namespace App\Exports;

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

class ExportUser implements FromCollection
{
    /**
     * @return \Illuminate\Support\Collection
     */
    public function collection()
    {
        return User::select('name', 'email')->get();
    }
}

Bước 8: Tạo Controller

Tiếp theo, chúng ta cần tạo một controller để hiển thị form tải lên tệp CSV hoặc Excel. Chạy lệnh sau để tạo controller và đặt code trong tệp tạo ra:

php artisan make:controller UserController

app/Http/Controllers/UserController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use App\Imports\ImportUser;
use App\Exports\ExportUser;
use App\Models\User;

class UserController extends Controller
{
    public function importView(Request $request)
    {
        return view('importFile');
    }

    public function import(Request $request)
    {
        Excel::import(new ImportUser, $request->file('file')->store('files'));
        return redirect()->back();
    }

    public function exportUsers(Request $request)
    {
        return Excel::download(new ExportUser, 'users.xlsx');
    }
}

Bước 9: Tạo Blade / View Files

Chúng ta đã đến bước cuối cùng. Ở đây, chúng ta cần tạo giao diện để xử lý Import và Export thông qua UI. Tạo tệp resources/views/importFile.blade.php và đặt code sau trong tệp đó:

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Laravel 8 Import Export Excel & CSV File - TechvBlogs</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
</head>

<body>
    <div class="container mt-5 text-center">
        <h2 class="mb-4">
            Laravel 8 Import Export Excel & CSV File - <a
                href="https://techvblogs.com/blog/laravel-import-export-excel-csv-file?ref=repo"
                target="_blank">TechvBlogs</a>
        </h2>
        <form action="{{ route('import') }}" method="POST" enctype="multipart/form-data">
            @csrf
            <div class="form-group mb-4">
                <div class="custom-file text-left">
                    <input type="file" name="file" class="custom-file-input" id="customFile">
                    <label class="custom-file-label" for="customFile">Choose file</label>
                </div>
            </div>
            <button class="btn btn-primary">Import Users</button>
            <a class="btn btn-success" href="{{ route('export-users') }}">Export Users</a>
        </form>
    </div>
</body>

</html>

Chạy Ứng dụng Laravel

Cuối cùng, chúng ta phải chạy ứng dụng Laravel. Mở cửa sổ Terminal và chạy lệnh sau:

php artisan serve

Sau khi thực thi lệnh này, truy cập vào địa chỉ http://localhost:8000/file-import trong trình duyệt của bạn.

Cảm ơn bạn đã đọc bài viết này.

Thành Nguyễn

Tôi là Thành, nên tôi đặt tên blog là Thành Nè, Thánh Né... là một coder cùi bắp (Code quèn). Chẳng giỏi viết lách, chỉ giỏi chém gió và có sở thích chia sẻ những kiến thức tôi đã từng...

Leave a Reply