Asked Mar 24th, 8:40 AM 73 2 3
  • 73 2 3
+2

Hỏi đáp về Import Excel trong Laravel Excel

Share
  • 73 2 3

Mọi người ơi cho em hỏi một chút ạ Em đang muốn Import Một File Excel từ Client lên Server, Xong từ Server đọc dữ liệu trả về rồi trả về Client. Hiện thị ra dữ liệu trong file excel. Hiện thị xong rồi mới đẩy lên csdl. Thì làm thế nào vậy ạ. Em đang sử dụng Laravel Excel bản 3.1 ( Bản này không hỗ trợ Excel:load )

Avatar Khanh Phan @Khanhphan
Mar 25th, 2:53 AM

Da vâng em cảm ơn các anh rất nhiều ạ

0
| Reply
Share

3 ANSWERS


Answered Mar 24th, 9:06 AM
+4

Anh có thể suggest một số cách làm như này, việc đọc file thì em đọc document của Laravel Excel nhé, phía dưới này anh chỉ ghi kiểu giải pháp thực hiện thôi.

Cách 1: Upload file và xử lý lưu database trong 1 request

  • Cho user upload file lên (cấu trúc file có các cột được quy định sẵn theo template mẫu)
  • Server nhận file thì sẽ validate xem đúng là file excel không.
  • Nếu đúng thì thực hiện đọc file bằng Laravel Excel, mỗi lần đọc từng dòng data trong excel ra đata mình sẽ lấy data và lưu vào database. Sau khi đọc hết thì response thành công về cho users
  • Nếu sai thì trả về response thể hiện lỗi.

Cách này đơn giản, tuy nhiên nếu số rows trong file excel nhiều thì người dùng phải đợi rất lâu thì mới nhận được response hoàn tất upload. Thậm chí nếu lâu quá bị quá request timeout thì user chẳng biết trạng thái như nào.

Cách 2: Upload file lên server, khởi tạo batch import chạy ngầm

Với cách này khi upload file lên server, chúng ta sẽ chưa đọc file excel ngay mà sẽ khởi tạo Batch Import vào queue và và response lại thông tin tiến trình xử lý luôn. Như batch_id - dùng để user subscribe một socket channel có tên theo batch_id tương ứng để nhận thông tin tiến trình xử lý từng record. Lúc này phía users em có thể hiển thị Progress Bar thể hiện trạng thái xử lý từng dòng.

Nếu ko có web socket server thì có thể làm kiểu đơn giản là cho client tự động sau 5/10s thì gửi một request lên server để lấy logs xử lý về cũng được. Tùy yêu cầu mà em có thể biến tấu xử lý thêm.

BatchImport thì được đưa vào queue để chạy ngầm, mỗi record được xử lý xong thì lưu lại vào db và bắn qua websocket. Bảng chứa thông tin này sẽ được tự động clear mỗi ngày chẳng hạn.

Cách 3: Không upload file lên, đọc file excel bằng JavaScript và gửi data đã đọc được lên server

Với cách này, em dùng các thư viện JavaScript cho phép đọc file Excel, thậm chí hiển thị Editor cho user sửa nội dung ngay trên trình duyệt như cách làm của Viblo Learning https://learn.viblo.asia.

Sau đó, dùng JavaScript để gửi data đọc được lên server (gửi data, không upload file). Server nhận data thì xử lý lưu data vào db như bình thường thôi. 😃

Em tham khảo một số cách làm như trên nhé.

Share
Answered Mar 24th, 9:00 AM
0

https://docs.laravel-excel.com/3.1/imports/basics.html bạn lên trên này đọc doc và tìm hiểu kỹ thì sẽ chi tiết hơn b nhé . Trong này có đầy đủ và hướng dẫn chi tiết việc import (đọc file excel), export excel đấy b ! Ở bản 3.1 thì sẽ là Excel::import() thay vì Excel::load() nhé.

https://docs.laravel-excel.com/3.1/getting-started/upgrade.html#upgrading-to-3-from-2-1

Share
Answered Mar 24th, 9:07 AM
0

nhớ không nhầm có Terminable Middleware , bạn có thể xem qua https://laravel.com/docs/8.x/middleware#terminable-middleware

Share
Viblo
Let's register a Viblo Account to get more interesting posts.