Top > OOoBasic > Generic > LoadAndStore

読み込みと保存 Edit

ドキュメントの読み込みと保存。ドキュメントの概要や新規作成に関してはドキュメントを参照してください。

開く Edit

既存のドキュメントを開くには 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 ファイルを開いてそのドキュメントのオブジェクトができます。メソッドの返り値はドキュメントオブジェクトです。このオブジェクトからドキュメントの操作が行えます。

メソッドの引数はそれぞれ次のようになります。

  1. 開くファイルの URL (システムパスは不可)
  2. 開くフレーム名指定 (HTML などでの指定と類似)
  3. フレーム検索フラグ com.sun.star.frame.FrameSearchFlag
  4. オプション指定。MediaDescriptor 参照。

フレーム名指定は次のような値またはフレーム名が利用できます。

特殊フレーム名説明
_blank空の新規フレーム
_default特殊。空のドキュメントがあると利用される
_self自身のフレーム (現在のドキュメントの更新などが無視される)
_parent親フレーム
_topフレームツリーでの最上位フレーム
_beamerサブフレーム

コマンドで開く Edit

.uno:Open コマンドを使用してドキュメントを開きます。

このコマンドは次のようなフォーマットでも利用できます。

.uno:Open?URL:string=file:///C:/post.odt&FrameName:string=_default

閉じる Edit

ドキュメントを閉じます。

閉じる Edit

更新の有無を確認せずに閉じます。

ThisComponent.close(True)

更新があれば確認して閉じる Edit

oController = ThisComponent.getCurrentController()
If oController.suspend(True) Then
  msgbox "Closed"
End If

上書き保存 Edit

ドキュメントオブジェクトのメソッド store を呼び出すことで上書き保存できます。このメソッドはドキュメントがすでに保存済にの時に上書きします。

oDoc = ThisComponent
oDoc.store()

保存 Edit

上書きでなく新しく作成されたドキュメントに名前を付けて保存するときには storeAsURL メソッドを使用します。

sURL = "file:///C:/usr/1.odt"

oDoc = ThisComponent
oDoc.storeAsURL(sURL,Array())

オプションにフィルタ名を指定しなければ ODF 形式で保存されます (設定によります)。特に保存形式を指定したい場合には MediaDescriptor を参照。

コマンドで保存 Edit

.uno:SaveAs コマンドを利用してドキュメントを保存します。マクロの記録などで。

エクスポート Edit

保存とエクスポートでは使用するメソッドが違います。エクスポートでは 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 参照。

コマンドでエクスポート Edit

マクロの記録を利用すると簡単にオプション指定してエクスポートできます。

保存状態 Edit

ドキュメントは新規作成された直後はドキュメントは自身の保存先を持っていません。

ドキュメントの URL Edit

ドキュメントの URL はドキュメントが保存されていないと空文字列です。

msgbox ThisComponent.getURL()

ドキュメントが保存済みかどうか Edit

ドキュメントが保存されているかどうかを hasLocation メソッドで確認できます。

oDoc = ThisComponent
msgbox oDoc.hasLocation()

ストリームから開く Edit

ファイルデータのストリームからドキュメントを開くことができます。

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

ストリームへの保存 Edit

ファイルストリームへドキュメントを保存できます。

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

読み込み問題 Edit

ドキュメントを loadComponentFromURL メソッドで読み込むとき、他の操作を続けておこなうと問題が起きる場合があります。

loadComponentFromURL メソッドは同期してドキュメントオブジェクトを戻します。一方で、ドキュメントにリンクがあり、自動更新の場合にはリンクの更新が終了していなくてもオブジェクトが戻ります。これを回避する方法がないので、wait などで待つなどの方法を利用します。


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes