貼code

2017年7月31日 星期一

Rails 的 DB export 成 excel檔

最近在弄的案子需要一個功能,就是能一鍵將後台的資料匯出整理成xlsx檔
原本看到一個gem叫rails_db,裡面的功能真是包山包海,也有一鍵輸出,
但沒有辦法做一些調整,只能原封不動地將資料丟出來。只好放棄尋找其他的gem。
最終的解法便是axlsx_rails這個gem(https://github.com/straydogstudio/axlsx_rails)

使用方法:
先在Gemfile中加入
gem 'rubyzip', '~> 1.1.0'
gem 'axlsx', '2.1.0.pre'
gem 'axlsx_rails'
然後bundle install
接著我是創一個download的controller
然後新增一個method叫order(就是想要dump的資料表的名稱)

def order
  @orders = Order.all
  render xlsx: 'order', template: "download/order.xlsx.axlsx", filename: "orders.xlsx"
end

最後加上template,記得檔名要寫對  order.xlsx.axlsx,然後會dump出一個orders.xlsx


wb = xlsx_package.workbook
wb.add_worksheet(name: "Orders") do |sheet|
    sheet.add_row ["官網訂單編號", "訂購人會員編號","訂購人", "處理進度"]
    @orders.each do |order|
      sheet.add_row [order.id, order.user_id, order.p_last_name+order.p_first_name, '']
    end
end

template的部分就可以整理成想要的格式,最後在route中設定好就可以拉!
如果有接administrate,就可以把download_controller繼承於admin::application_controller這樣他也會吃到authenticate_user 就不怕使用者亂戳不小心就dump下來整個db拉XD