よろずやネット

最近はLibreofficeにハマっています。

UNOってなんだ?

OpenOfficeのマクロ自動記録で最初のほうに、
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
というのが出てくる。
createUnoServiceは、「Unoサービスを作る」って感じだろうな。ふむふむ。
よし、それでは、UNOを調べてみよう。
あった、あった。

http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/ProUNO/UNO_Interprocess_Connections

勝手な意訳:
UNOは様々な環境でオープンオフィスの内部プロセスをつなぐオブジェクト。
そうか、Visual Basic .NetとOpenOfficeもつなげそうな感じ。UNO=「宇野さんのかけ橋」ってところか。

リンクをたどってみよう。

Automation Bridgeっていうのが出てきたぞ。
http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Bridge/Automation_Bridge

勝手な意訳:
オープンオフィスはマイクロソフトのオートメーション技術をサポートしているので、外部プログラムからオープンオフィスの操作が可能。
(いいぞ!)
でも、オートメーションやCOMと互換性があるように設計されていない。
だから、UNOサービスマネージャというブリッジ(橋)を最初にたてる必要がある。
具体的には、ActiveX コンポーネントでcom.sun.star.ServiceManagerを呼び出してサービスマネージャというオブジェクトを作る。
オートメーションはウインドウズだけでMACやUNIXでは使えない。

上記WebページにA Quick Tour(クイックツアー)というのがあってVBScriptのサンプルが載っている。
' The service manager is always the starting point (サービスマネージャが常に最初の一歩目だ)
' If there is no office running then an office is started up (オフィスが起動されていない場合、オフィスが起動される)
Set objServiceManager= WScript.CreateObject("com.sun.star.ServiceManager")
…以下省略

よし、これをVisual Basic .Net風に書き換えよう。
Setステートメントはもはやサポートされていないから、
objServiceManager=CreateObject("com.sun.star.ServiceManager")
だろうな。
objServiceManagerが定義されていないから、定義しないといけない。
どんな型で定義すれば良いのだろう。
「サービスマネージャというオブジェクトを作る」と書いてあったから、Object型を試してみよう。

Dim objServiceManager As Object
objServiceManager=CreateObject("com.sun.star.ServiceManager")

これをSharpDevelopでランさせてみよう。
よし!エラー発生なし!