この投稿は、OP の質問に回答します。
それ以外の場合は、Java コードからパワー ポイントのマクロを実行できます。親切に助けてください!!
(ただし、元の vbscript の質問には対応していません)
Java COM Bridge を表す JACOB ライブラリがあります。ここで見つけることができます: http://sourceforge.net/projects/jacob-project/?source=directory
これにより、Excel、Word、Outlook、PowerPoint のアプリケーション オブジェクト モデル メソッドを呼び出すことができます。
Excel でこれを試しましたが、PowerPoint では試しませんでした。(これは単なるサンプル コードです。よりオブジェクト指向にするとよいでしょう。)
public class Excel {
private static ActiveXComponent xl = null;
public static Init() {
try {
ComThread.InitSTA();
xl = ActiveXComponent.connectToActiveInstance("Excel.Application.14");
// 14 is Office 2010, if you don't know what version you can do "Excel.Application"
if (xl==null) {
// code to launch Excel if not running:
xl = new ActiveXComponent("Excel.Application");
Dispatch.put(xl, "Visible", Constants.kTrue);
}
}
catch (Exception e) {
ComThread.Release();
}
}
public static String Run(String vbName) {
// Variant v = Dispatch.call(xl, "Run", vbName); // using string name lookup
Variant v = Dispatch.call(xl, 0x103, vbName); // using COM offset
// return Dispatch.get(this, "Name").getString();
return v.getString();
}
public static Variant Run1p(String vbName, Object param) {
// Variant v = Dispatch.call(xl, "Run", vbName, param);
return Dispatch.call(xl, 0x103, vbName, param);
// return Dispatch.get(this, "Name").getString();
}
public static Worksheet GetActiveWorksheet () {
// Dispatch d = xl.getProperty("ActiveSheet").toDispatch();
Dispatch d = Dispatch.get(xl, 0x133).toDispatch ();
return d; // you may want to put a wrapper around this...
}
}
ノート:
少なくとも Excel の場合、Run で VBA マクロ/サブルーチンを呼び出すには、いくつかの条件が満たされている必要があります。
- マクロを含む Excel ワークブックは「アクティブ」である必要があります (つまり、ActiveWorkbook である必要があります)。そうでない場合、Run は VBA サブルーチンを検出しません。(ただし、ワークブックが画面に表示されている必要はありません!!つまり、アドイン内の VBA マクロを呼び出すことができます!)。
- 次に、次の構文を使用してマクロの名前を文字列リテラルとして渡すことができます。
VBAProjectName.VBAModuleName.SubroutineName
COM オブジェクトの呼び出しには、名前ルックアップ バージョンまたは ID 番号バージョンを使用できます。ID 番号は、公開された COM インターフェイス (C++ ヘッダー ファイルで見つけることができます。または、JACOB に検索させることもできます) から取得されます。
Excel への接続に成功した場合は、完了したら必ず ComThread.Release() を呼び出してください。最後に適切な周囲に置きます。Java コードのプロセスが呼び出されずに終了すると、Excel の COM 参照カウントが正しくなくなり、Excel アプリケーションを終了しても Excel プロセスが終了しなくなります。それが起こると、言うまでもなく、Excel はおかしな動作を開始します (次に使用しようとすると、実行されますが、プラグイン/アドオンの読み込みに失敗します)。これが発生した場合 (デバッグ中に発生する可能性があります。特にデバッグを改善するために final をバイパスしている場合)、タスク マネージャーを使用して Excel プロセスを強制終了する必要があります。