rails6 EXCELファイルを作成する
rails6で、EXCELファイルを作成する手順を記述してます。railsのバージョンは6.1.0です。
環境
- OS ubuntu20.10
- ruby 2.7.2
- rails 6.1.0
- Postgresql 13.1 (dockerで構築)
事前準備
Gemfileに、EXCELを作成するため、以下を追加します。
gem 'caxlsx'
gem 'caxlsx_rails'
ダミーデータを作るのにFakerを使用するので、以下も追加してます。
gem 'faker'
インストールします。
bundle install
scaffoldで、テーブルを作成しておきます。
rails g scaffold Sample name:string job:string
rails db:migrate
samplesテーブルが作成されます。
データ作成
Fakerからダミーデータを「db」フォルダ配下の「seeds.rb」に記述して作成します。
100.times do |n|
name = Faker::Name.name
job = Faker::Job.position
Sample.create(
name: name,
job: job,
)
end
実行します。
bundle exec rails db:seed
実行結果 テーブル「samples」
コントローラー編集
作成された「app/controllers」内の「samples_controller.rb」を以下のように編集します。
class SamplesController < ApplicationController
before_action :set_sample, only: [:show, :edit, :update, :destroy]
# GET /samples
# GET /samples.json
def index
# 編集
@samples = Sample.all
respond_to do |format|
format.html
format.xlsx
end
end
ダウンロードするEXCELのファイルの名前を変更する場合は、filenameに任意の名前を指定します。
format.xlsx {
response.headers["Content-Disposition"] = 'attachment; filename="hoge.xlsx"'
}
テンプレート作成
「app/views/samples」フォルダ内にEXCLEのテンプレートとなる「index.xlsx.axlsx」を作成します。
wb = xlsx_package.workbook
wb.add_worksheet(name: "sheetname") do |sheet|
sheet.add_row ["No", "name", "job"]
@samples.each.with_index(1) do |sample,i|
sheet.add_row [i, sample.name, sample.job ]
end
end
シート名は、以下の箇所で指定できます。
name: "sheetname"
ダウンロードリンク作成
最後に、viewにEXCELダウンロード用のリンクを作成します。
<p id="notice"><%= notice %></p>
<h1>Samples</h1>
<%# 追加 %>
<%= link_to "Excel出力", samples_path(@samples, format: :xlsx) %>
ダウンロード
実際にダウンロードして確認してみます。
ブラウザから http://プライベートIP or サーバーアドレス:3000/samples にアクセスします。
EXCELダウンロードのリンクをクリックして、EXCELをダウンロードします。
「samples.xlsx」がダウンロードされます。
確認すると、EXCELファイルにデータが書き込みこまれていることが確認できます。
-
前の記事
php 連想配列のキーを小文字・大文字に変換する 2020.12.27
-
次の記事
Ruby 配列の先頭から指定した数の値を削除する 2020.12.28
コメントを書く