3

Javaコードから、このコードを使用してvbscriptを実行できます

Runtime.getRuntime().exec("wscript C:\\ppt\\test1.vbs ");

しかし、java から vbscript のメソッドを呼び出す方法を知りたい..たとえば、test1.vbs で

Set objPPT = CreateObject("PowerPoint.Application")
    objPPT.Visible = True
    Set objPresentation = objPPT.Presentations.Open("C:\ppt\Labo.ppt")
    Set objSlideShow = objPresentation.SlideShowSettings.Run.View
    sub ssn1()
      objPPT.Run "C:\ppt\Labo.ppt!.SSN"
    End sub

Java から ssn1() メソッドだけを呼び出す方法。それ以外の場合は、Java コードからパワー ポイントのマクロを実行できますか。親切に助けてください!!

4

4 に答える 4

1

これはあなたを幸せにするはずです:) WScriptセクションに行きます:http://technet.microsoft.com/library/ee156618.aspx

これが私の考えです...あなたのvbscriptファイルで、呼び出すメソッドを指定するコマンドラインパラメーターをスクリプトにリッスンさせます。次に、Java では、ファイル内の特定のメソッドを呼び出したいときはいつでも、このパラメーターを使用するだけで済みます。

それ以外の場合、Java でパワーポイントにアクセスする場合は、vbscript で行ったようにその API にアクセスする必要があります。これは、vbscript で実行できる場合に可能ですが、アプローチ/構文が変更される可能性があります。

于 2012-07-13T07:04:08.923 に答える
0

PowerPoint アプリケーション オブジェクトの .Run メソッドを使用すると、開いているプレゼンテーションまたは読み込まれたアドインでパブリック サブルーチンまたは関数を呼び出すことができます。

于 2012-07-13T12:16:44.013 に答える
0

この投稿は、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 マクロ/サブルーチンを呼び出すには、いくつかの条件が満たされている必要があります。

  1. マクロを含む Excel ワークブックは「アクティブ」である必要があります (つまり、ActiveWorkbook である必要があります)。そうでない場合、Run は VBA サブルーチンを検出しません。(ただし、ワークブックが画面に表示されている必要はありません!!つまり、アドイン内の VBA マクロを呼び出すことができます!)。
  2. 次に、次の構文を使用してマクロの名前を文字列リテラルとして渡すことができます。

VBAProjectName.VBAModuleName.SubroutineName

COM オブジェクトの呼び出しには、名前ルックアップ バージョンまたは ID 番号バージョンを使用できます。ID 番号は、公開された COM インターフェイス (C++ ヘッダー ファイルで見つけることができます。または、JACOB に検索させることもできます) から取得されます。

Excel への接続に成功した場合は、完了したら必ず ComThread.Release() を呼び出してください。最後に適切な周囲に置きます。Java コードのプロセスが呼び出されずに終了すると、Excel の COM 参照カウントが正しくなくなり、Excel アプリケーションを終了しても Excel プロセスが終了しなくなります。それが起こると、言うまでもなく、Excel はおかしな動作を開始します (次に使用しようとすると、実行されますが、プラグイン/アドオンの読み込みに失敗します)。これが発生した場合 (デバッグ中に発生する可能性があります。特にデバッグを改善するために final をバイパスしている場合)、タスク マネージャーを使用して Excel プロセスを強制終了する必要があります。

于 2012-07-13T15:05:25.227 に答える
0

私は Visual Basic スクリプト側にはあまり興味がありませんが、Visual Basic スクリプトを COM オブジェクトとして公開できれば、com4j などのフレームワークを使用して Java からそのメソッドにアクセスできます。

http://com4j.java.net/

于 2012-07-13T06:49:06.177 に答える