2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Excel出力するcaxlsx_railsの使い方について

Last updated at Posted at 2022-09-12

環境

Rails 5.2
Ruby 2.6
Ubuntu 20.4

はじめに

RailsでExcel出力をする方法についての記事です。Excel出力をするgemにcaxlsx_railsを利用します。RailsでExcel出力する方法についてググると、axlsx_railsというgemに関する情報が多く検索されます。caxlsx_railsの公式サイトを見ると、以前は、axlsx_railsという名前のgemで提供されていたが、caxlsx_railsという名前に変更されているようです。

caxlsx_railsの公式サイト
https://github.com/caxlsx/caxlsx_rails

Excel出力の仕方

Gemfileに下記のgemを追加して、bundle installを実行します。

gem 'caxlsx_rails'

Excel出力をするメソッド名をこの記事ではexportとします。routesにtasksコントローラーのexportメソッドへのルート情報を記述します。

routes.rb
resources :tasks
    get :export,  on: :collection
end

コントローラーにexportメソッドを記述します。tasksテーブルの内容を全件取得して、Excelファイルに出力します。ExcelファイルはTask一覧.xlsxというファイル名にしています。ファイル選択のサブ画面を表示して、任意のファイル名を初期表示することができます。サブ画面では初期表示されたファイル名を変更することができます。

tasks.rb
def export
    @tasks = Task.All
    respond_to do |format|
        format.xlsx do
            response.headers['Content-Disposition'] = 'attachment; filename="Task一覧.xlsx"'
        end
    end
end

ビューで処理を実行するボタンを記述します。form_tagではなくlink_toにしなくてはいけないところがポイントです。

index.html.slim
= link_to "Excel出力", tasks_path(@tasks, format: :xlsx)

viewフォルダの配下に、excel.xlsx.axlsxファイルを作成します。公式サイトにテンプレートがあるため、それを参考にするといいでしょう。wb.add_worksheetでExcelのタブ名を指定できます。下記では、tasksテーブルの、idとTask名を出力しています。また、Excelの1行目にタイトルを出力しています。

excel.xlsx.axlsx
wb = xlsx_package.workbook
wb.add_worksheet(name: "Task一覧") do |sheet|

    sheet.add_row %w(id Task名)

    @tasks.each do |task|
        sheet.add_row do |row|
	        row.add_cell(task.id)
	        row.add_cell(task.tasknm)
	    end
    end
end
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?