タグ:OpenOffice.org ( 4 ) タグの人気記事
[VBScript] Excelマクロに、ドロップされたファイルのパスを渡す をOpenOffice.orgでの実行… その4
どーもボキです。

OOo v3.1.1 が出てたので、前回同様Excelマクロを呼び出せるか試してみた。
結果は、「getScript は サポートされていない」エラー…。

やりたかったこと
 VBSからExcelに記述したマクロを引数付きで呼び出す

VBSを使って、OOoでExcelファイルを開き、そのマクロを呼び出すだけなら出来たけど (参照:その1)、
呼び出したマクロに引数を渡すってまでは出来ない。

マクロを呼び出すだけなら、ExcelマクロのAuto_Openを使えばいいからね。
わざわざVBSを使って呼び出すメリットがない。

検索するとgetScriptを記述したサンプルが見つかるけど、
出来たことあるんやろうか?

ネットって(悪意のない)ウソテクのことがあるから注意せなね。
[PR]
by yozda | 2009-09-08 20:40 | プログラミング | Trackback | Comments(0)
[VBScript] Excelマクロに、ドロップされたファイルのパスを渡す をOpenOffice.orgでの実行… その3
どーもボキです。

以下のバージョンのOOoで、getScriptを試したけど、
どれも「getScript は サポートされていない」エラー。

 v2.1.0
 v2.4.0
 v3.0.0
 v3.1.0

バージョンがまずいわけじゃなく、他に原因があるんだろう。
調べても分からんし、もうあきらめた。
[PR]
by yozda | 2009-06-17 23:59 | プログラミング | Trackback | Comments(0)
[VBScript] Excelマクロに、ドロップされたファイルのパスを渡す をOpenOffice.orgでの実行… その2
どーもボキです。

OOo(OpenOffice.org)のマクロを外部プログラムから実行する場合、本来はgetScriptでマクロを取得するみたい。
だが、ココに書いてある通り、getScrptメソッドを実行すると、メソッドが存在しないエラーが発生する。

VBScript、Delphiで同様のコードを試したが、
どちらもgetScriptメソッド実行のタイミングでエラーが発生した。

当然だが、記述言語に関係なくマクロが取得できないみたいだ。

getScriptでマクロを取得しなければ、引数付きでマクロを起動できない。
どうやってマクロを取得したらいいんだろう?

VBScript
Dim oSrv,oDsk,oDoc,oScP,oScr
Dim dummy()

' OpenOffice.orgに接続
Set oSrv = CreateObject("com.sun.star.ServiceManager")
Set oDsk = oSrv.createInstance("com.sun.star.frame.Desktop")

' ファイルを開く
Set oDoc = oDsk.loadComponentFromURL("file:///D:/Macro.xls", "_blank", 0, dummy)

' Module1.Testを取得
Set oScP = oDoc.getScriptProvider()
Set oScr = oScP.getScript("vnd.sun.star.script:Standard.Module1.Test?language=Basic&location=document")

' Testマクロを実行
oScr.invoke dummy, dummy, dummy
a0021757_23343346.gif


Delphi
uses
ComObj, Variants;

var
oSrv,oDsk,oDoc,oScP,oScr,dummy : Variant;

begin
dummy := VarArrayCreate([0,-1],varVariant);

// OpenOffice.orgに接続
oSrv := CreateOLEObject('com.sun.star.ServiceManager');
oDsk := oSrv.CreateInstance('com.sun.star.frame.Desktop');

// ファイルを開く
oDoc := oDsk.LoadComponentFromURL('file:///D:/Macro.xls','_blank',0,dummy);

// Module1.Testを取得
oScP := oDoc.getScriptProvider;
oScr := oScP.getScript('vnd.sun.star.script:Standard.Module1.Test?language=Basic&location=document');

// Testマクロを実行
oScr.invoke(dummy,dummy,dummy);
a0021757_23345239.gif

[PR]
by yozda | 2009-06-16 23:35 | プログラミング | Trackback | Comments(0)
[VBScript] Excelマクロに、ドロップされたファイルのパスを渡す をOpenOffice.orgでの実行… その1
どーもボキです。

OpenOffice.orgってのは、一言でいうと「無料のOffice Pro」。
(Pro = パワーポイント相当のアプリ付)

Officeとの互換性も(ある程度)あり、Officeで作成したファイルも開ける。
マクロ機能もあり、VBもサポートしている。(ある程度)

つまり、Excelマクロが開けて、マクロの実行も出来る。
VBScriptからマクロを引数付きで起動できるか試してみた。

結果は、指定したマクロは起動できたが、引数は渡せなかった
Set objServiceManager = CreateObject("com.sun.star.ServiceManager")
Set objDesktop = objServiceManager.createInstance("com.sun.star.frame.Desktop")
Dim dummy()
Set oDoc = objDesktop.loadComponentFromURL("file:///D:/ExcelMacro.xls", "_blank", 0, dummy)

Set oURL = objServiceManager.Bridge_getStruct("com.sun.star.util.URL")
oURL.Complete = "macro://ExcelMacro/Standard.Module1.Test"

Set oTrans = objServiceManager.createInstance("com.sun.star.util.URLTransformer")
Call oTrans.parseStrict(oURL)


Set oDisp = objDesktop.queryDispatch(oURL, "_self", 0)
Call oDisp.Dispatch (oURL, dummy)
ココのソースをちょこっといじっただけだけど。

上の例では、D:\ExcelMacro.xls の Module1 > Test というサブルーチンを呼び出してる。
それ以外のコードは、サッパリ意味がわからん。
[PR]
by yozda | 2009-06-13 23:06 | プログラミング | Trackback | Comments(0)