読み込みと保存
ドキュメントの読み込みと保存。ドキュメントの概要や新規作成に関してはドキュメントを参照してください。 開く
既存のドキュメントを開くには StarDesktop (Basic のランタイム関数) からloadComponentFromURL メソッドを呼び出します。StarDesktop は com.sun.star.frame.Desktop へのショートカットなので,そこからメソッドなどが提供されています。 Dim oDoc As Object oDoc = StarDesktop.loadComponentFromURL( _ "file:///C:/usr/local/test.sxc", _ "_blank", 0, Array() ) これで test.sxc ファイルを開いてそのドキュメントのオブジェクトができます。メソッドの返り値はドキュメントオブジェクトです。このオブジェクトからドキュメントの操作が行えます。 メソッドの引数はそれぞれ次のようになります。
フレーム名指定は次のような値またはフレーム名が利用できます。
コマンドで開く
.uno:Open コマンドを使用してドキュメントを開きます。 このコマンドは次のようなフォーマットでも利用できます。 .uno:Open?URL:string=file:///C:/post.odt&FrameName:string=_default 閉じる
ドキュメントを閉じます。 閉じる
更新の有無を確認せずに閉じます。 ThisComponent.close(True) 更新があれば確認して閉じる
oController = ThisComponent.getCurrentController() If oController.suspend(True) Then msgbox "Closed" End If 上書き保存
ドキュメントオブジェクトのメソッド store を呼び出すことで上書き保存できます。このメソッドはドキュメントがすでに保存済にの時に上書きします。 oDoc = ThisComponent oDoc.store() 保存
上書きでなく新しく作成されたドキュメントに名前を付けて保存するときには storeAsURL メソッドを使用します。 sURL = "file:///C:/usr/1.odt" oDoc = ThisComponent oDoc.storeAsURL(sURL,Array()) オプションにフィルタ名を指定しなければ ODF 形式で保存されます (設定によります)。特に保存形式を指定したい場合には MediaDescriptor を参照。 コマンドで保存
.uno:SaveAs コマンドを利用してドキュメントを保存します。マクロの記録などで。 エクスポート
保存とエクスポートでは使用するメソッドが違います。エクスポートでは storeToURL メソッドを使用します。 sURL = "file:///C:/usr/1.pdf" Dim aArgs(1) As New com.sun.star.beans.PropertyValue aArgs(0).Name = "FilterName" aArgs(0).Value = "writer_pdf_Export" oDoc = ThisComponent oDoc.storeToURL(sURL,aArgs) 二番目の引数にオプションを指定することで保存するフォーマットを指定できます。オプションの詳細は MediaDescriptor 参照。 コマンドでエクスポート
マクロの記録を利用すると簡単にオプション指定してエクスポートできます。 保存状態
ドキュメントは新規作成された直後はドキュメントは自身の保存先を持っていません。 ドキュメントの URL
ドキュメントの URL はドキュメントが保存されていないと空文字列です。 msgbox ThisComponent.getURL() ドキュメントが保存済みかどうか
ドキュメントが保存されているかどうかを hasLocation メソッドで確認できます。 oDoc = ThisComponent msgbox oDoc.hasLocation() ストリームから開く
ファイルデータのストリームからドキュメントを開くことができます。 Sub stream_1 sURL = "file:///C:/usr/1.odt" oSFA = CreateUnoService("com.sun.star.ucb.SimpleFileAccess") oIn = oSFA.openFileRead(sURL) Dim aArgs(0) As New com.sun.star.beans.PropertyValue aArgs(0).Name = "InputStream" aArgs(0).Value = oIn oDoc = StarDesktop.loadComponentFromURL( _ "private:stream","_blank",0,aArgs) End Sub ストリームへの保存
ファイルストリームへドキュメントを保存できます。 Sub StoreToPipe oDoc = ThisComponent Dim aProps(1) As New com.sun.star.beans.PropertyValue oOut = CreateUnoService("com.sun.star.io.Pipe") aProps(0).Name = "FilterName" aProps(0).Value = "PukiWiki" aProps(1).Name = "OutputStream" aProps(1).Value = oOut sURL = "private:stream" oDoc.storeToURL(sURL, aProps) End Sub 読み込み問題
ドキュメントを loadComponentFromURL メソッドで読み込むとき、他の操作を続けておこなうと問題が起きる場合があります。 loadComponentFromURL メソッドは同期してドキュメントオブジェクトを戻します。一方で、ドキュメントにリンクがあり、自動更新の場合にはリンクの更新が終了していなくてもオブジェクトが戻ります。これを回避する方法がないので、wait などで待つなどの方法を利用します。 |