13
10

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 5 years have passed since last update.

【Rails】CSV/Excelデータを出力機能作成まとめ(View/Controller/Model)

Posted at

下準備

CSVクラスをRailsで使えるようにする必要があります。

config/application.rb

# config/application.rb
require File.expand_path('../boot', __FILE__)

require 'rails/all'
require 'csv'

View

CSVダウンロード、エクセルダウンロードのリンクを作ります。

html.erb
# csv_downloadするリンク -> このリンク押すとcsvデータがダウンロードされる。
<%= link_to "CSV", csv_download_path(format: "csv") %>

# excel_downloadするリンク -> このリンク押すとexcelデータがダウンロードされる。
<%= link_to "Excel", excel_download_path(format: "excel") %>

FilesController

リクエストを受け取ったら、CSV/エクセルデータを返します。

class FilesController < ApplicationController
  def csv_download
    # 分かりやすいようにインスタンス変数にしておきました。
    @csv_data = FileData.csv_data

    respond_to do |format|
      # .csv
      format.csv { send_data @csv_data }
    end
  end

  def excel_download
    # 分かりやすいようにインスタンス変数にしておきました。
    # なんだかよく分からないoptionが入ります。
    @excel_data = FileData.excel_data(col_sep: "\t")

    respond_to do |format|
      # .xls
      format.xls { send_data @excel_data }
    end
  end
end

FileData Model

CSV/エクセルオブジェクトを作成します。

class FileData
  # 引数無し
  def self.csv_data
    csv_data = CSV.generate do |csv|
      # csvに二次元配列を代入
      csv = [
        ['a','a','a','a'],
        ['b','b','b','b'],
        ['c','c','c','c']
      ]
    end
    return csv_data
  end

  # excel_dataの場合はoptionsを渡す。
  # 引数有り!
  def self.excel_data(options = {})
    # 引数有り!
    excel_data = CSV.generate(options) do |csv|
      # csvに二次元配列を代入
      csv = [
        ['a','a','a','a'],
        ['b','b','b','b'],
        ['c','c','c','c']
      ]
    end
    return excel_data
  end
end

Excelデータ出力のその他の処理

config/initializers/mime_types.rb

これを追加する。

Mime::Type.register "application/xls", :xls

↓結果

# Be sure to restart your server when you modify this file.

# Add new mime types for use in respond_to blocks:
# Mime::Type.register "text/richtext", :rtf

Mime::Type.register "application/xls", :xls

参考リンク

13
10
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
13
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?