よろずやネット

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

ドキュメントを開く loadComponentFromURL

前回、オープンオフィスのUNOへの接続までをやった。
私の場合、Visual Basic .Netで「印刷コードを書くのがだるい」という理由から、オープンオフィスの試行錯誤が始まったわけだが、
次のステップは、UNOを通じたカルク(Calc)へのアクセスということになる。

新規ドキュメントや既存ドキュメントを開くコードは結構ネット上で拾える。
拾えることは拾えるが、その日本語の説明が現段階では見つからない。

フローはこうなる。
Call ConnectOOo() '前回作成したSubプロシージャ
Dim oCalcDoc As Object 'ドキュメントを定義
oCalcDoc = oDesktop.loadComponentFromURL(Param1, Param2, Param3, Param4)

--------------------------
上記で使用している loadComponentFromURL というメソッドの詳細は、以下にある。
http://api.openoffice.org/docs/common/ref/com/sun/star/frame/XComponentLoader.html

loadComponentFromURL には4つのパラメータがあり、上記ページによると、
Param1は開きたいドキュメントのURLを指定する。(String型)
Param2はターゲットフレームを指定する。(String型)
Param3はサーチフラッグを指定する。(Long型)
Param4は開くドキュメントのオプション(例えばReadOnlyとか)を指定する。(com.sun.star.beans.PropertyValueのストラクチャ)

正直、私のようなシロウトには一部難解意味不明な言葉が並んでいる。

Param3のサーチフラッグの詳細は、
http://api.openoffice.org/docs/common/ref/com/sun/star/frame/FrameSearchFlag.html
にあるが、サーチフラッグの概念がわからないのでパス。
ちなみに、ネット上のコードサンプルは、ほぼ例外なく0(ゼロ)を適用している。

Param4の詳細は、
http://api.openoffice.org/docs/common/ref/com/sun/star/document/MediaDescriptor.html
にあるが、Param4は、com.sun.star.beans.PropertyValueのストラクチャの配列なので、普通の配列を代入してもエラーが発生する。
--------------------------
Param1にはウインドウズのパスを入力することができない。
ウインドウズのパスをURLに変換する次の関数を使うと便利だ。

Public Function ConvertToUrl(ByVal strFile as string) As String
    strFile = Replace(strFile, "\", "/")
    strFile = Replace(strFile, ":", "|")
    strFile = Replace(strFile, " ", "%20")
    strFile = "file:///" + strFile
    ConvertToUrl = strFile
End Function

--------------------
Param4には、ただドキュメントを開くだけならば、次の関数を使用する。
Public Function dummyArray() As Object
    ' ダミーの空配列
    Dim Result(-1) As Object
    dummyArray = Result
End Function
--------------------

ドキュメントを開くコードサンプル

Call ConnectOOo() '前回作成したSubプロシージャ
Dim oCalcDoc As Object 'ドキュメントを定義
Dim MyFilePath As String = "C:\test.ods"  'test.odsはオープンオフィスのカルクファイル

oCalcDoc = oDesktop.loadComponentFromURL(ConvertToUrl(MyFilePath), "_blank", 0, dummyArray())

このサンプルでは、(ファイルのアイコンをダブルクリックした時のように)普通にtest.odsが開く。