【Rails】AxlsxでExcelファイルを出力(ダウンロード)する方法

Ruby on RailsでExcelファイルを出力(ダウンロード)する方法を紹介します。今回は「Axlsx」というGemを使って出力します。

【Rails】AxlsxでExcelファイルを出力(ダウンロード)する方法

Gemfileに以下を指定して、「Axlsx」をインストールします。

詳しいGemのインストールの組み合わせは以下の公式に記載されています。

指定したら、bundle installしましょう。

respond_toを使用するためにmime_types.rbに以下を追記します。

・config/initializers/mime_types.rb

・app/view/users/index.html.erb

Viewにエクセル出力するためのボタンを設置します。

今回は、例としてusersコントローラのexcelメソッドでエクセル出力を行うため、ルーティングに以下(get :excel)を追記しましょう。

・config/routes.rb

Viewでユーザ一覧エクセル出力ボタンを押下すると、usersコントローラのexcelメソッドに送信され、xlsxフォーマットを指定してエクセル出力処理が行われます。

ファイル名は「filename=”user_lists”‘+ Time.zone.now.strftime(‘%Y%m%d%H%M%S’) + ‘.xlsx’」で指定しており、user_lists20190621163621.xlsxのようなファイルが出力されます。

今回はユーザ一覧を出力するため「@users = ::User.all」で全ユーザを取得しておきます。

・app/controllers/users_controller.rb

エクセル出力を定義するViewを用意し、出力内容を書いていくと完成です。

ファイル名の指定はアクション名.xlsx.axlsxです。今回はexcelメソッドを使用しているため、excel.xlsx.axlsxです。「wb.add_worksheet(name: “ユーザ一覧”) do |sheet|」で、シート名を指定します。

stylesでエクセル内のフォントや配置を指定しています。今回はヘッダー部分の背景色の指定とデータ部分の背景色・下線を指定しています。もっと詳しい指定方法は以下のサイトに記載されています。

@users.each do |user|で先ほど取得したユーザを出力しています。

・app/view/users/excel.xlsx.axlsx

実際にユーザ一覧エクセル出力ボタンを押下すると、エクセルファイルが出力され、以下のようなデータが表示されます。