QA@IT
«質問へ戻る

質問を投稿

Jcomを使用したExcelマクロ実行について

kmと申します。

Webアプリで、複数のExcelをWebサーバ側で結合して、最終的に画面からダウンロードするような仕組みを作ろうとしています。
あれこれ調べてみましたが、複数のExcelの結合自体をjavaから実行することが困難そうなので(POIも使えない環境です)、Excelマクロを使って、結合することにしました。
こちらの記事を参考にさせていただいて、どうにかjavaからExcelマクロを実行できるようにしました。
(jcomの作者様がアドバイスされているだけあって、当該方式ですでに実装はし、ある程度確認ができています。)

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=43458&forum=12

ただし、java側から引数(Excelのパス)を渡したものの、Excelマクロでどのように受け取ればよいのかよくわからず、javaからexcelのシートおよびセルを指定する形で引数を渡す、何ともチープな作りとなってしまっています。。。
本当は以下のように、argにそれぞれ引数を設定して、"Run"するときにExcel側に引数が渡ると思うのですが。

        Object[] arg = new Object[3];
        arg[0] = "testmacro";   // マクロ名
        arg[1] = "aaa";         // 引数1
        arg[2] = "bbb";         // 引数2
        Object ret = excel.method("Run", arg);

素人考えで、Excelのマクロ側で引数が受け取れるように、プロシージャのSub マクロ名("ここに引数を指定")してみましたが、今度はjava側でマクロを認識せず、動きませんでした。
(引数指定のExcelマクロは、Excelのマクロ表示上からも消えることから、javaから参照できないということなんでしょうかね)

どのようにExcelマクロを記述すれば引数を受け取れるか、ご存知でしたらアドバイスいただけると助かります。

kmと申します。

Webアプリで、複数のExcelをWebサーバ側で結合して、最終的に画面からダウンロードするような仕組みを作ろうとしています。
あれこれ調べてみましたが、複数のExcelの結合自体をjavaから実行することが困難そうなので(POIも使えない環境です)、Excelマクロを使って、結合することにしました。
こちらの記事を参考にさせていただいて、どうにかjavaからExcelマクロを実行できるようにしました。
(jcomの作者様がアドバイスされているだけあって、当該方式ですでに実装はし、ある程度確認ができています。)

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=43458&forum=12

ただし、java側から引数(Excelのパス)を渡したものの、Excelマクロでどのように受け取ればよいのかよくわからず、javaからexcelのシートおよびセルを指定する形で引数を渡す、何ともチープな作りとなってしまっています。。。
本当は以下のように、argにそれぞれ引数を設定して、"Run"するときにExcel側に引数が渡ると思うのですが。

            Object[] arg = new Object[3];
            arg[0] = "testmacro";   // マクロ名
            arg[1] = "aaa";         // 引数1
            arg[2] = "bbb";         // 引数2
            Object ret = excel.method("Run", arg);

素人考えで、Excelのマクロ側で引数が受け取れるように、プロシージャのSub マクロ名("ここに引数を指定")してみましたが、今度はjava側でマクロを認識せず、動きませんでした。
(引数指定のExcelマクロは、Excelのマクロ表示上からも消えることから、javaから参照できないということなんでしょうかね)

どのようにExcelマクロを記述すれば引数を受け取れるか、ご存知でしたらアドバイスいただけると助かります。