「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:3344
現在:2


VBSでcalcファイルを開きたい

ページOpenOffice.org FAQの登録ページ
投稿者S-Osaka
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2010-10-18 10:29:04 (月)
OSwin vista
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

パソコンのタスクスケジューラを使って電源ON、必要なアプリケーション群を立ち上げる、作業、作業終了後、必要なアプリケーション群を閉じる、電源を落とす。
と言うことをやっています。
今は下記の命令文でエクセルに作業させていますが、calcのプログラムが同様の作業をできるようになったのでエクセルと交代したいと思っています。
VBスクリプトに関することであり、ここで、質問するのはなじまない性格の内容かもしれないので、迷ったのですがもし助言がいただければよろしくお願いします。

開く

Set oEXCEL = WScript.CreateObject("Excel.Application")
oEXCEL.Workbooks.Open(SelfPath & "..\..\Board.xls")
oEXCEL.Visible = True
oEXCEL.Sheets(1).Select


※Visibleの部分は制御したい項目です。

閉じる

Set Locator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.ConnectServer

Set eProcs = Service.ExecQuery _
 ("Select * From Win32_Process Where Description=""EXCEL.EXE""")
For Each eProc In eProcs
	eProc.Terminate
Next


また、ネットで、以下のようなものを見つけたのですが、これで開くとマクロにブロックがかかるようです。
このブロックを解除する方法を、この命令文側で行う方法、calc本体側で行う方法の両方知りたいのですが、
どうかよろしくお願いします。

Dim wShell
Dim Link
Dim Path
Dim Document
Set wShell=CreateObject("WScript.Shell")
Set Link=wShell.CreateShortCut(".url")
Set Document=WScript.GetObject("about:blank")
Set OSM = WScript.CreateObject("com.sun.star.ServiceManager")
Set oDesktop = OSM.createInstance("com.sun.star.frame.Desktop")

Dim Result() 'As Object
dummyArray = Result
Set oCalcDoc = ODesktop.loadComponentFromURL(SelfPath & "../classic.ods", "_blank", 0, dummyArray)

まずは はにゃ?さん のサイトを調べましょう

ike@九州 (2010-10-18 15:10:12 (月))

http://hermione.s41.xrea.com/pukiwiki/index.php?OOoBasic%2FGeneric%2Fexecute

〜
Dim args(1)
For i = 0 To UBound(args)
   Set args(i) = oSM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Next
args(0).Name = "Hidden"             '表示、非表示
args(0).Value = False
args(1).Name = "MacroExecutionMode" 'マクロの実行モード
args(1).Value = 4

Set oCalcDoc = oDesktop.loadComponentFromURL("file:///E:/usr/doc.ods", "_blank", 0, args)
'以下は特定のマクロを実行する場合
'ドキュメント内マクロ
scriptURI = "vnd.sun.star.script:Standard.Module1.Main?language=Basic&location=document"
'マイマクロ内マクロ
'scriptURI = "vnd.sun.star.script:Standard.Module1.Main?language=Basic&location=application"

Set scriptProvider = oCalcDoc.getScriptProvider()
Set introspection = oSM.createInstance("com.sun.star.beans.Introspection")
Set inspected = introspection.inspect(scriptProvider)
Set m = inspected.getMethod("getScript", -1)
Set s = m.invoke(scriptProvider, array(scriptURI ))
Call s.invoke(array(), array(), array())

'上書き保存
'Call oCalcDoc.store
 
'名前をつけて保存の場合
'Call oCalcDoc.storeAsURL("file:///E:/test.ods",dummyArray)

'閉じる
'Call oCalcDoc.close(true)

'OOoを終了する
'Call oDesktop.terminate()

もう少しだけ教えてください。

S-Osaka (2010-10-18 17:20:22 (月))

はにゃ?さん のサイトは何度も見ているのですがこういうことだということがさっぱりわかりませんでした。
申し訳ないです。
こうやって教えて貰って実行して成功してから書いてあることの意味がだんだ飲み込めてくると言うような感じです。
oCalcDocですが、
Set oCalcDoc = oDesktop.loadComponentFromURL("file:///E:/usr/doc.ods", "_blank", 0, args)
で開くようですが、開くスクリプトと閉じるスクリプトが別々の場合閉じるときはどう書けばよいのでしょうか?
また、その際に特定のマクロを実行するか、終了したい場合どのようにすればよいのでしょうか?

PS

S-Osaka (2010-10-18 17:26:47 (月))

毎秒監視しているマクロがcalc側の終了前のマクロ実行で停止させたつもりが、タイミングのためか停止せず、エラーが出てしまいます。

無題

S-Osaka (2010-10-19 00:32:29 (火))

終了の際のoCalcDocは
Set oCalcDoc = oDesktop.getCurrentComponent()
でなんとかできました。
あとは終了少し前にタイマーのマクロを終了したいのですが、
その終了用のマクロの実行がどうしても上手く行きません。
よろしくお願いします。

終了用のマクロの実行

ike@九州 (2010-10-19 08:22:48 (火))

Set scriptProvider = oDoc.getScriptProvider()
上記を以下に(タイプミスでした)
Set scriptProvider = oCalcDoc.getScriptProvider()

原因がわかりました。

S-Osaka (2010-10-19 11:44:03 (火))

いつも教えていただいてとても感謝しています。
タイプミスのところは気付いていたのですが、どうしても教えていただいた文の最終前が引っかかって上手く行きませんでした。
プロシージャのパス指定が上手くいかないようなので、いろいろググっているうちに引数をわたす括弧のことが書かれているものをいくつか見させていただきました。
タイマー停止命令は最初のころに何もわからず(今も同様ですが)テストがてらに適当に書いたころのもので、タイトルの後に無意味な空の括弧が付いていました。
この括弧をとっちゃうとうまく行きました。
なお、マクロにブロックがかかった状態で開いたブックの本体からこのブロックを解除する方法はあるのでしょうか?
もしあれば教えてください。

無題

ike@九州 (2010-10-20 09:48:36 (水))

プログラマではないので
都度調べ一緒に考えるスタンスです。
何処を調べるかだけは上手くなりました。 ほほほ

>マクロにブロックがかかった状態で開いたブックの本体からこのブロックを解除する方法

現状マクロセキュリティについてユーザー設定は無視されて外部から開いたドキュメント内のマクロは実行できないようになっているのはご存知だと思います。
解除の情報はありませんでした。

只、外部 vbs から scriptProvider を使用してブロックの掛かったドキュメント内のマクロの実行は可能でした。
Set oCalcDoc = oDesktop.getCurrentComponent() と scriptProvider を使用して vbs からマクロの実行は OK だという事ですね

oDesktop.getCurrentComponent() はドキュメントがアクティブでないとエラーになる事は知っておいて下さい。

〜
'ドキュメントの取得の例
Set oCalcDoc = getOooComp("file:///E:/usr/doc.ods")
〜
WScript.Quit()

Function getOooComp(sURL)
  Set oComponents = oDesktop.getComponents
  Set oComponentsEnum = oComponents.createEnumeration()
   While oComponentsEnum.hasMoreElements()
    Set oComponent = oComponentsEnum.nextElement()
      If oComponent.getURL = sURL then
          Set getOooComp = oComponent
      End if 
   Wend
End Function

なるほど!そういうことですか

S-Osaka (2010-10-20 21:34:58 (水))

→現状マクロセキュリティについてユーザー設定は無視されて外部から開いたドキュメント内のマクロは実行できないようになっているのはご存知だと思います。
全く知りませんでした。
意味がわかりました。
ありがとうございます。

お名前:
題名: