RPG

97. RPG で EXCELの値を直接、読むには?

かなり高度というかマニアックな項目であるが、果たして RPG によって Excelのセル値を直接、
読むことはできるのであろうか?
できるとすればその具体的な方法とは?

答えは YES である。Out of Topics にも紹介したが Jakarta POI を利用すれば IFS に
保管されているExcel の値を直接、読むことができる。
その方法をここで紹介しよう。

まず Jakarta POI を IFSに導入しておく。 POI 自体も Java であるから Java が導入
されている iSeries/i5 であれば動作するはずである。

次にPOI のメソッドを使って Excelのセル値を標準出力するJava を開発する。
QSHELLコマンドによって、そのJavaを起動するが、起動の前後で標準出力を作業ファイル
などにリダイレクトするようにしておく。
OVRPRTF STDOUT で可能となる。
次にリダイレクトされた作業ファイルをRPG で読んで処理するといった具合である。

何だかわかったような簡単なようで狐につままれた気がするかも知れない。
実は POI の利用方法は難しくはない。
Webサイトを探して頂ければサンプルは見つかるはずである。
(後日、完全なJavaソースを紹介することをお約束する。
ここで紹介しないのはChicago Ver6.0 がまだリリースされていないからである。)

Excelを直接、処理したいと希望される開発者であれば標準出力のリダイレクトくらいは
ワケ無く解決されるものと思う。
しかし問題は Java の動作スピードである。
筆者が検証したところ確かに POI を利用して RPG で Excelブックのセル値を表示すること
には見事に成功した。次はその結果の画面である。

単なるサブ・ファイルの表示のように見えるだけであるが実はこのRPGはIFS に保管されて
いる Excel のセル値を表示しているのである。
検証には OS400 V5R1M0 Model 170 を使用したが表示されるまでには数分を要した。
これでは製品としてリリースできないのである。
それなりの大きなCPW値を持つ iSeries/i5 では問題にはならないかも知れないが
製品としてリリースするには Java の最初の起動があまりにも遅すぎるのである。
起動してしまえば問題はないのであるが 最初のJava の起動が遅すぎる。

2005年11月末現在、弊社では Jakarta POI のオープンJavaソースを解析してC/400 への
移植を試みている。
POI は約280本という莫大な Javaソースから成り立っているのでPOI のすべてを移植する
ことは不可能であるが、成功すればこの機能は Chicago Ver6.0 PRO版に搭載される
予定である。
あなたの会社の iSeries/i5 が十分な速度を持っているのであればExcelブックを POI
使って直接、読むRPGを開発することができる。
そうでなければ Chicago Ver6.0 PRO版を利用することが手っ取り早い解決である。