2006年1月10日火曜日

Ruby とエクセル

前回のブログ でウチの会社では、ゲームのデータ作成用のツールとして、Ruby をよく使用しているといった旨の事を書きました。せっかくだからどんなカンジに使っているのか紹介しておこうかなと思います。



と、いっても、たいして高度なことをやっているわけではなくて、基本的にはゲーム用のデータテーブルを作成する際に使用しているというのが基本的な用途なのです。具体的には エクセルの xls ファイルから、欲しい形式のデータ(テキストもしくはバイナリ)に変換するためのツールなんですね。



で、きょうび、エクセルはほとんどのゲーム会社でデータ管理&作成に使用していると思うんですけれど、ポイントはその後なんです。ちなみに Ruby を導入する前のウチの会社だと下記のようなパスで変換していました。



  1. xls ファイルを作成


  2. エクセルで、xls ファイルを csv で保存


  3. C/C++ 等のプログラムで、csv ファイルを任意の形式に変換


と、こんなカンジ。これはわりと伝統的な手法だと思います。



これだと、なにがイヤなのかというと、コンバートの度に xls -> csv の出力を行わなくてはいけないっていう事や、xls の方を更新しても、うっかり csv に出力するのをわすれて、古いデータを使用し続けてしまったりという、人為的な手間&ミスがスゴク起こりやすかったんですよね。



おまけに、csv ファイルって複数のシートを使用している xls ファイルには対応していないので、便利な複数シートの機能が使えなかったりとか、余計な制約も生まれてしまっていたんですよね。まぁ、不便この上なかったんです。



で、これが Ruby の導入でウチの会社ではどう変わったのかというと、



  1. xls ファイルを作成


  2. Ruby スクリプトで、xls ファイルを直接読む


  3. Ruby スクリプトで、そのまま、任意のファイル形式に変換&出力


という風にかわりました。xls ファイルを直接、読んでいるので、もちろん複数のシートを使っていてもOK だし、テキストや数値以外にも、セルの色の情報とかもその気になれば、取得可能になりました。制限がへり、ぐっと xls ファイルの自由度があがった訳です。しかも、当たり前ですが C/C++ 等にくらべて、Ruby 等のスクリプト言語は、遙かに配列やテキスト処理が簡単で、ツール作成自体の効率も上がり、まさに一石二鳥だったわけなんですね。



で、どうやって Ruby で直接、xls ファイルを読んでいるのかというと、Windows の COM という仕組みを使う事で実現しています。詳しくは、



るびま Win32OLE活用法





にスゴク詳細にかいてありますから、興味がある人は読んでみてください。



あ、もちろん、COM をつかってエクセルにアクセスすることは、C/C++ でもできるんですけどね。そのためには、Ruby とかで COM を使用する場合に比べて、さらに Windows やプログラムの知識も必要になるし、なんといっても、手軽さと利便性が全然違うと思います。





もし、まだ、csv ファイル経由でデータテーブルの作成等をやっている方には、この手段の導入はホント、オススメですヨ!(ついでに書くと Ruby でなくても python でも同じ事ができます)



0 件のコメント: