この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
こんにちは、KBMJの中平@railsエンジニアです。
今回はruby on railsでデータをExcelファイルに出力する 方法ついて書きます。
よく、Webシステムでデータをファイルに出力する際にはCSV形式で出してしまう事が多いと思いますが、
CSV データをExcelで開くと、「001234」というデータの頭ゼロが消されてしまい「1234」と数値として表示されてしまう事があるため、 CSVではなくExcel形式で出力したい時はないでしょうか?
また、rubyでデータをExcelに出力するプラグイン はいくつか存在しますが、
Excelがはいっていないとだめだったり、windowsでしかつかえなかったり、記述がExcelのシートや セルを意識しないとダメだったりと、めんどくさいものが多く、
ruby on railsで簡単に出力できるプラグインはあまりないのではないかと思います。
そこで、今回はruby on railsで簡単にデータをExcelファイルとして出力することができる、to_xlsというpluginの使い方について書こうと思い ます。 *csv出力の方法はこちら→http://doruby.kbmj.com/nakahira_on_rails/20100318/ruby_on_rails_CSV__to_csv_Plugin_
環境
OS : Windows Vista
Ruby : 1.8.6
ruby on rails : 2.1 (2系以上ならto_xlsが使えると思います)
to_xlsのインストール
ruby script/plugin install git://github.com/arydjmal/to_xls.git
設定ファイルの編集
config/initializers/mime_types.rb
に
Mime::Type.register “application/vnd.ms-excel”, :xls
を追加
コントローラーのメソッドに以下のコードを記述
def index
@users = User.all
respond_to do |format|
format.html
format.xml { render :xml => @users }
format.xls { send_data @users.to_xls }
end
end
@users.to_xls で取得したデータをExcel形式にしています。
また README.rdocに書いているオプションを解説すると
@users.to_xls
すべてのカラムを出力
@users.to_xls(:only => [:last_name, :role])
onlyで指定したカラムを出力
@users.to_xls(:headers => false)
先頭行にカラム名を出力しない
@users.to_xls(:except => [:last_name, :role])
exceptで指定したカラム以外を出力
@users.to_xls(:except => :role, :methods => :admin?)
:methodsはカラム名?で記述したカラムのデータのnullを判定しているぽい
nullだったらfalse null以外はtrueを表示している
このような動作をするようです。
このあたりは、find時に出力データをrails側で制御してもいいかもしれません。
実際にruby on railsでデータをExcelに出力する
コントローラー名/index/hoge.xls
というようにアクション名の後ろにファイル名をつけてブラウザでアクセスすると
データがExcel形式で出力されますので、ファイルに保存後Excelで開くとデータを見ることができます。(ファイル拡張子が違うという警告が出ますが気にしない)
なお、この出力したファイルをテキストエディタで表示してみるとわかるのですが、
実はデータはXML形式になっています。これはExcelの「XMLスプレッドシート」という形式になっており、ExcelファイルをXMLで記述した形になっています。
実際にExcelから適当にファイルを作ってファイル保存する時の形式を「XMLスプレッドシート」にして保存すると同じ形式になっていることがわかると思います。
* XMLスプレッドシートはExcel2003以上で使えると思います。
また、この to_xlsは、このままではセルや文字に色をつけることができませんが、Excelから「XMLスプレッドシート」形式でファイルを作成して、XMLの記述方法を参考にすることで
色の付け方などの方法をみてto_xlsプラグインをカスタマイズすることで色をつけたり文字フォントを変えることができそうです。
このto_xlsというpluginは簡単に導入できてコードも数行で済みますので、ruby on rails からCSVではなくExcel形式でデータ出力したい場合には試してみてはいかがでしょうか?
Ary Djmal / to_xls Plugin: Export to Excel in Rails the Easy Way
http://arydjmal.com/2009/1/11/to_xls-plugin-export-to-excel-in-rails-the-easy-way
arydjmal’s to_xls at master – GitHub
http://github.com/arydjmal/to_xls