LibreOffice Calc Basic - ドキュメントを保存する方法
◆com.sun.star.frame.XStorable インターフェース
LibreOffice ドキュメントの保存処理は、ドキュメントオブジェクトを通じて直接実行されます。このような処理をBasicで行うには、com.sun.star.frame.XStorableインターフェースのstoreメソッドを、以下のような形で使用します。
ThisComponent.store()
このメソッドは、ドキュメントへのメモリ割り当てが既に終了している場合のみ機能します。ただしこの条件は、新規ドキュメントの場合には該当しません。そのような場合にはstoreAsURLを使用します。このメソッドはcom.sun.star.frame.SXtorableにも用意されており、以下のようにドキュメントの保存位置を指定する際に使用できます。
Dim URL As String Dim Dummy() Url="file:///C:/test1.ods" ThisComponent.storeAsURL(URL,Dummy())
これらのメソッドの他にcom.sunstar.frame.XStorableには、ドキュメントの保存に関するいくつかのサポート用メソッドが用意されています。これに該当するのが、以下のメソッドです。
- hasLocation() - ドキュメントのURL指定が完了しているかを確認します。
- isReadOnly() - ドキュメントが読み取り専用であるかを確認します。
- isModified() - 前回保存時からドキュメントが変更されているかを確認します。
ドキュメント保存用のプログラムコードを構築する際には、これらのオプションを利用することで、変更箇所があるドキュメントのみ保存処理を進めたり、名前が指定されていない場合のみファイル名の指定を要求するなどの機能を組み込むことができます。
Sub DocSave dim oDoc as object oDoc=ThisComponent If (oDoc.isModified) Then If (oDoc.hasLocation And (Not oDoc.isReadOnly)) Then oDoc.store() Else oDoc.storeAsURL(URL, Dummy()) End If End If End Sub
上記のサンプルコードでは、まず最初に、前回保存時からドキュメントが変更されているかを確認しています。そして変更箇所がある場合のみ、残りの保存処理を継続します。次に、ドキュメントのURL 指定の有無と、読み取り専用でないことを確認し、双方の条件を満たしている場合のみ、既存の URL に対してドキュメントを保存します。URL 指定が完了していない場合、あるいは読み取り専用で開かれている場合は、URL を新規指定して保存する処理を行います。
◆保存の確認を行う場合
ユーザーに確認する場合は、以下のようなコードになります。
このサンプルコードでは、ユーザーが[はい]をクリックすると、文書を保存し、ドキュメントオブジェクトのCloseメソッドで文書を閉じています。
Sub DocSaveClose Dim ret% dim oDoc as object oDoc=ThisComponent If oDoc.isModified Then if (oDoc.hasLocation And (Not oDoc.isReadOnly)) then ret = MsgBox( "このドキュメントを保存しますか?",3 + 32 ,"保存の確認") If ret=6 then rem[はい] oDoc.store() oDoc.close(True) elseIf ret%=7 then rem[いいえ] oDoc.close(True) exit sub End If end If else oDoc.close(True) End if End Sub
◆マクロ記録
マクロの記録機能で作成されたコードは以下の通りです。
dim document as object dim dispatcher as object document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())
▼ページトップへ