その他
    ホーム 技術発信 DoRuby ruby on railsでデータをExcelファイルに出力する。 to_xls Plugin編

    ruby on railsでデータをExcelファイルに出力する。 to_xls Plugin編

    この記事はアピリッツの技術ブログ「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