こんにちは、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

ブックマークに追加する

.
web開発ならKBMJ
Rubyでのwebシステム開発は
実績豊富なKBMJにお任せ下さい
iPhone開発
iPhone開発は
KBMJにお任せ下さい
ブラウザゲーム エインヘリアル
ブラウザゲーム「エインへリアル」
αテスター募集中
オープンソースECパッケージ エレコマ
オープンソースECパッケージ
「エレコマ」

プロフィール

nakahira
nakahira
kbmjでrailsエンジニアをしている。中平です。

ruby on railsのこと:
ruby on rails でのシステム開発は2006年12月ぐらいからおこなっております。
ruby on rails を知ってからは他の言語をやりたくないぐらい、ハマってます。

開発環境:
あえてWindows vistaで開発をしています。(人柱w)
aptanaというIDEを使っています。自分の周りではvimを使う人が多いですが・・・・
vimが軽くて使いやすいのは知ってますけど、自分が好きな物を使えばいいとおもうのと、vimのことはいろんな人に聞けるけど、aptanaの使い方わからないという人の為にあえて人柱w

私のこと:
攻殻機動隊が大好きです。タチコマ大好き!!
人工無能に興味あり、社内ircとsnsに人工無能ボットを仕込んで遊んでいます。
無能のコアは、rubyで作られたシシャモを利用しているので、いつかは自分の人工無能エンジンを創ってみたいですね。

最近チェックした記事

最新記事

アーカイブ

アクセスランキング

KBMJのWebソリューション
Ruby on railsの開発ならKBMJ
株式会社ケイビーエムジェイ