Export CSV, Excel
Đôi khi người sử dụng muốn xử lý dữ liệu theo cách mà họ muốn. Trong tình huống như vậy thì chúng ta nên xuất dữ liệu trong một định dạng bảng để người dùng có thể dùng các trình soạn thảo để làm bất kỳ điều gì họ muốn. Bài viết này giới thiệu đến mọi người cách đơn giản nhất để export dữ liệu ra ...
Đôi khi người sử dụng muốn xử lý dữ liệu theo cách mà họ muốn. Trong tình huống như vậy thì chúng ta nên xuất dữ liệu trong một định dạng bảng để người dùng có thể dùng các trình soạn thảo để làm bất kỳ điều gì họ muốn.
Bài viết này giới thiệu đến mọi người cách đơn giản nhất để export dữ liệu ra file CSV/Excel.
Để đơn giản thì mình giả sử mình đang muốn xuất dữ liệu của bảng Product ( gồm 2 cột là ID và Name)
I. Export CSV
- Đầu tiền ta sử dụng thư viện CSV để tạo ra dữ liệu CSV, bằng cách như sau.
Thêm vào file config/application.rb như sau
require File.expand_path('../boot', __FILE__) require 'csv'
- Tiếp theo file products_controller.rb ta thêm một khối respond_tonhư đoạn sau.
def index @products = Product.all respond_to do |format| format.html format.csv {render text: @products.to_csv} end end
- Trong models/product.rb method to_csv được mô tả:
def self.to_csv CSV.generate do |csv| csv << column_names all.each do |product| csv << product.attributes.values_at(*column_names) end end end
Dòng đầu tiên của file sẽ là tên các trường của bảng Product. Các dòng tiếp theo là giá trị các trường tương ứng với dòng đầu của mỗi product trong database.
- Trong View thêm dòng này để khi click vào sẽ xuất ra file products.csv
<%= link_to "CSV", products_path(format: "csv") %>
II. Export Excel
- Thêm vào file /config/initializers/mime_types.rb như sau:
Mime::Type.register "application/xls", :xls
- Thêm format: xls trong products_controller.rb
def index @products = Product.all respond_to do |format| format.html format.xls { render text: @products.to_csv } end end
- Trong models/product.rb method to_csv được mô tả tương tự như đối với file csv:
def self.to_csv CSV.generate do |csv| csv << column_names all.each do |product| csv << product.attributes.values_at(*column_names) end end end
- Và ta tượng trong view chúng ta thêm
<%= link_to "Excel", products_path(format: "xls") %>
Trên đây là cách đơn giản nhất để xuất dữ liệu ra file CSV/Excel mà mình đã được biết đến.