前回、オープンオフィスの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が開く。