1. kmifa

    Posted

    kmifa
Changes in title
+RailsでExcelファイルを出力する
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,84 @@
+今回は[Axlsx_rails](https://github.com/straydogstudio/axlsx_rails)というgemを使います。
+ボタンを押したらダウンロード出来るとこまでやります。
+
+## 環境
+・ruby 2.3
+・Rails 5.1
+
+# 準備
+gemを追加
+
+```ruby:Gemfile
+gem 'rubyzip', '>= 1.2.1'
+gem 'axlsx', git: 'https://github.com/randym/axlsx.git', ref: '776037c0fc799bb09da8c9ea47980bd3bf296874'
+gem 'axlsx_rails'
+```
+
+Mime::Typeを追加
+
+```ruby:config/initializers/mine_types.rb
+Mime::Type.unregister :xlsx
+Mime::Type.register "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", :xlsx
+```
+
+任意のアクションに対して下記のコードを追加(model名は適当です)
+
+```ruby:app/assets/products_controller.rb
+class ProductsController < ApplicationController
+
+def index
+ @products = Product.all
+ respond_to do |format|
+ format.html
+ format.xlsx {
+ response.headers['Content-Disposition'] = 'attachment; filename="Product.xlsx"'
+ }
+ end
+end
+```
+
+# テンプレートの作成
+出力するファイルのデザインや、要素を書き込んでいきます。
+
+Axlsx_railsはAxlsxというgemに依存しているのでAxlsxのサンプルがそのまま使えます。
+[Axlsx サンプルコード](https://github.com/randym/axlsx/blob/master/examples/example.rb)
+
+それでは実際に作っていきます。
+
+## 実装
+`app/views/products`フォルダにテンプレートファイルを作成します。
+
+ファイル名には規則があります。
+`action名.xlsx.axlsx`
+
+今回は`index.xlsx.axlsx`になります。
+もし、`actionがcreate`だとしたら
+`create.xlsx.axlsx`というファイル名になります。
+
+```ruby:app/views/products/index.xlsx.axlsx
+wb = xlsx_package.workbook
+wb.styles do |style|
+ highlight_cell = style.add_style(bg_color: "EFC376")
+
+ wb.add_worksheet(name: "Products") do |sheet|
+ @products.each do |product|
+ sheet.add_row [product.title, product.price], style: [nil, highlight_cell]
+ end
+ end
+end
+
+```
+
+次にダウンロードボタンを追加します。
+
+```ruby:app/views/products/index.html.erb
+<%= link_to 'Download spreadsheet', product_path(format: :xlsx), data: {turbolinks: false} %>
+```
+
+これでExcelファイルをダウンロードできるようになりました。
+
+## 参考サイト
+・[Generate Excel Spreadsheets with Rails and the Axlsx Gem](https://www.sitepoint.com/generate-excel-spreadsheets-rails-axlsx-gem/)
+・[【Rails】Rubyテンプレートで axlsx を出力する方法](http://system.blog.uuum.jp/entry/ruby-template-axlsx)
+・[axlsx_rails を用いて Excel のスプレッドシートを生成する](https://qiita.com/shao1555/items/9c55dcf33d6234d197ac)
+・[RailsでExcelを扱うGemまとめ](https://qiita.com/Kta-M/items/02a2c41c5624f75498aa)