Import dữ liệu từ excel vào database trong rails
Bài đăng này đã không được cập nhật trong 3 năm
- Giới thiệu
- Bài viết giới thiệu về
gem roo
được sử dụng để giúp chúng ta thao tác với dữ liệu trong file excel ở trong rails, và cụ thể là ví dụ làm sao để import dữ liệu từ file excel vào trong database. - Trong nhiều trường hợp, dự án của ta làm việc cho khách hàng mà họ yêu cầu dự án phải đưa được data sẵn có từ trước của họ vào trong project. Đặc biệt là trong ngành kế toán, phần lớn dữ liệu của họ được chứa sẵn ở trong file excel, mà rails chỉ cung cấp sẵn cho chúng ta làm việc với file
csv
. Muốn thao tác với file excel, có một số gem sẽ giúp chúng ta làm việc này, mà điển hình trong đó làgem roo
.
- Sử dụng
gem roo
-
Cách sử dụng
gem roo
:- Giả sử ta có một project sẵn có và có một model
User
với các thuộc tính nhưname:string
,email:string
,password:string
,birthday:datetime
. Và một controller để xử lí việc mà chúng ta sẽ import data từ file excel chứa các dữ liệu về các user vào database. - Trước tiên ta cần thêm vào trong Gemfile:
gem 'roo'
và chạy lệnhbundle install
. - Trong file
models/user.rb
ta thêm các hàm sau:
def self.import(file) spreadsheet = open_spreadsheet(file) header = spreadsheet.row(1) (2..spreadsheet.last_row).each do |i| row = Hash[[header, spreadsheet.row(i)].transpose] user = find_by_id(row["id"]) || new user.attributes = row.to_hash.slice(*row.to_hash.keys) user.save! end end def self.open_spreadsheet(file) case File.extname(file.original_filename) when ".csv" then Roo::CSV.new(file.path) when ".xls" then Roo::Excel.new(file.path) when ".xlsx" then Roo::Excelx.new(file.path) else raise "Unknown file type: #{file.original_filename}" end end
- Thêm vào
app/controllers/users_controller.rb
hàm sau:
def import User.import(params[:file]) redirect_to users_path, notice: "Users imported." end
- Thêm vào
config/routes.rb
định tuyến:
resources :users do collection { post :import } end
- Thêm vào file
config/application.rb
dòng:
require 'roo'
- Tiếp đó thêm vào trong
views/users/index.html.erb
:
<h4>Import from Excel file</h4> <%= form_tag import_admin_users_path, multipart: true do %> <%= file_field_tag :file %> <%= submit_tag "Import", class: "btn btn-success" %> <% end %>
- Bấy đó là đủ rồi nhé các bạn, giờ
rails s
thử xem nào =)). Trên trình duyệt các bạn mở linkhttp://localhost:3000/users
có một đoạn giao diện như sau:
- Tiếp đó các bạn click vào nút
Choose File
sau đó có một cửa sổ hiện lên cho các bạn chọn file excel chứa dữ liệu cần thêm vào, và giả sử có một vài dòng như sau:
- Sau khi chọn xong thì nhấn nút
Import
, hệ thống sẽ xử lí thêm dữ liệu vào database cho các bạn ) .
- Giả sử ta có một project sẵn có và có một model
-
Tài liệu tham khảo: http://railscasts.com/episodes/396-importing-csv-and-excel
All rights reserved