はじめに
axlsx_railsを使ってCSV出力機能を実装するメモ。
やりたいこと
- Rails5アプリケーションからCSVを出力したい
実現方法
- gem
axlsx_rails
を使う github.com
実装方法
gemインストール
gem 'axlsx_rails'
MIMEの登録
長いので\config\initializers\mime_types.rb
に登録する。
Mime::Type.unregister :xlsx Mime::Type.register 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', :xlsx
実装
View
- Excelのヘッダー部とデータ部を定義する。
app/view/hoge/fuga.xlsx.axlsx
という感じで作成する。
wb = xlsx_package.workbook wb.styles do |s| row_style = s.add_style alignment: { horizontal: :left, vertical: :top, wrap_text: true } wb.add_worksheet(name: "source") do |sheet| # ヘッダー headers = [t('activerecord.attributes.user.user_code'), t('activerecord.attributes.user.user_name')] sheet.add_row headers, style: row_style # データ @hoge.each do |hoge| row = [hoge.user.user_code, hoge.user.user_name] sheet.add_row row, style: row_style end end end
Controller
respond_to
メソッドの呼び出しxlsx
のフォーマットでリクエストが来た場合、app/view/hoge/fuga.xlsx.axlsx
を表示する。template
には、上部で定義したExcelのフォーマットの場所を指定する
def csv respond_to do |format| format.html format.xlsx do response.headers['Content-Disposition'] = 'attachment' end end render xlsx: source_file_name, template: 'hoge/fuga' end