MS Office VBAの活用

RubyのWIN32OLEでCOMオブジェクトが扱えることの確認にEXCEL VBAを使ってみました。
前から気になっていたのですが今までは機会が無く初めて詳しく見てみたのですが、その結果は今までVBAを使わなかったことを後悔することになりました。
業務でMS Officeを使うソフトウェアエンジニアはもっとVBAの活用を考えるべきだと思います。
また、好みを別にすれば、EXCELやWORDを強力なレンダリングエンジンとすることができ、システムのMVCモデルのビューとしてソリューションに活用することを考えるべきだと思います。
特にEXCELではデータを各種チャートで表示、印刷することができ、なおかつ一般のユーザになじみがあるのでユーザカスタマイズの可能性が高いという点は無視できない利点だと思います。


なじみの無い方に簡単に説明するとMS Office VBAはマクロ機能といいながら実態はMS Office製品に組み込まれたVBの開発、実行環境で、MS Officeドキュメントの内容をVBプログラムから操作することができるものです。
例えばEXCELの場合ではシートやセルの変更をイベントとしてハンドルしたり、データをVBプログラムで加工、更新することができます。
MS Office製品に組み込まれたVBAIDEはCOMコンポーネントを作成することができない以外は全くVBそのものでした。
なのでMS Officeドキュメント自体がVBアプリケーションの開発・実行環境として使うこともできます。
VBはCOMコンポーネントは参照設定だけで使用することができ、C言語などで開発されたDLLもVBプログラム内で宣言記述してパスを通すだけで比較的簡単に呼び出すことができ、拡張性にも優れています。
公式にはあまり知られていなくても実際に利用できるCOMコンポーネントは想像以上に多くあります。
興味のある方は一度VB IDEの参照設定で利用可能なコンポーネントを眺めてみれば良いと思います。


さて、そもそも調べたかったRubyからのMS Officeのアプリケーションの操作についてですが、MS Officeアプリケーション自体がCOMコンポーネントになっていますのでRubyなどのOLEオブジェクトを扱えるプログラムから、例えばEXCELのシートからセルのデータを取得して加工して別のシートに更新するといった、MS Officeドキュメントの操作を行うことができます。
またVBAの中からもScriptControlオブジェクトを通してWindows標準のVBScriptJScript以外にもActiveScriptRubyやActivePerlをインストールすればRubyPerlも実行することができます。
この具体的な内容は別の機会に書きたいと思います。


まだ詳しくは調べられていませんがStarSuiteでも同様のマクロの機能があります。
MS Office製品と同等のことが可能かどうか、Linux版はどうかなどが興味深いところです。