質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

5063閲覧

VBA上で起動した場合のみ、POIを利用したJava(jarファイル)がエラーを返す

rancet

総合スコア10

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2015/08/28 11:32

POIライブラリを利用して、エクセルファイルを読み込んである処理を行うコードをJavaで作成しました。

JavaIDE上での正常動作を確認してJarへビルドし、
VBA上でShell.Run (%COMSPEC%)を使いJarを起動したところ、WorkbookFactoryにてオブジェクトをとった際にエラーを返しました。

FileInputStream fs = new FileInputStream("file.xls")
//ここでダイアログを表示させて通過を確認しています。
Workbook wb = new WorkbookFactory(fs)
//ここを通らずエラー落ちします。

どのようなエラーを返しているかは特定できていません。
try,chatchでマルチキャッチを記述するとそもそもJar自体が起動せずJNIエラーを返します。

IDE上では正しく動作する物が、VBA(Shell)上では挙動が変わるということはあるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

「クラスパス」ってキチンと通してありますか?
JavaIDEは、具体的に何をご使用になられているか分かりませんが、アプリの起動に必要な最低限のクラスパスを、ご親切にも予め設定してくれているのですが、コマンドプロンプトから実行する場合には逐一自分で設定する必要があります。
ココ の「[ 1 ] クラスパスの設定 - コマンド編 -」という節を参考に、再確認してみてください。

投稿2015/08/28 11:50

編集2015/08/28 11:52
pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rancet

2015/08/28 12:43

ご回答ありがとうございます。 ですが、ご存知の通りJar自体の起動はできています。 POIを利用しないJarは問題なく使用できます。 今回の質問は、VBA(Shell)を経由した場合のみworkbookのオブジェクトをとる時にエラーが出ている件についての回答を求めています。 クラスパスを通すことでPOIの挙動が変わる理由があれば追加でご教授ください。
eripong

2015/08/28 13:01

POIを利用しているのにPOIのクラスにクラスパスが通っていないと、 jar起動のタイミングではなく、POIのクラスを参照したタイミングで、 NoClassDefFoundErrorが発生します。 という前提でpi-chanさんは書いていると思います。 試しに、コマンドプロンプトから、VBAで実行しているコマンドを 実行するとどうなるでしょうか?
pi-chan

2015/08/28 14:47

eripongさん、的確な補足説明をありがとうございます! rancetさん、「コマンドプロンプトから、VBAで実行しているコマンドを実行する」というのは、極めて有用なデバッグ方法です!!(自分は常に実践しています) この時、Runメソッドに「実際に渡される」文字列を、MsgBoxやDebug.Printで実際に表示させ、それを「コピペ」して実行してみる、というのがポイントです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問