Top > OOoBasic > Generic > document

ドキュメント Edit

OOo Basic でドキュメントを操作する場合に知っておくとよさそうなこと。既存のドキュメントを読み込んだり保存する方法は読み込みと保存を参照してください。

ドキュメント Edit

開いているドキュメントの Basic コードからそのコードがあるドキュメントにアクセスするには ThisComponent ステートメントを使用します。

 Dim oDoc As Object
 oDoc = ThisComponent

ドキュメントオブジェクトにしたい変数 (ここでは oDoc) に代入します。 このドキュメントオブジェクトを通じてドキュメントの様々な内容にアクセス操作できるようになります。

すでに開いているドキュメントでも,StarDesktop からアクセスできます。

 Dim oDoc As Object
 oDoc = StarDesktop.CurrentComponent

StarDesktop のプロパティー CurrentComponent を用いると,Basic コードを実行したドキュメントオブジェクトが取得できます。

新規ドキュメント Edit

新しい空のドキュメントを開くときは loadCompoentFromURL の引数の URL を次のように指定します。

documentURL
writerprivate:factory/swriter
webprivate:factory/swriter/web
globalprivate:factory/swriter/GlobalDocument
calcprivate:factory/scalc
drawprivate:factory/sdraw
impressprivate:factory/simpress
mathprivate:factory/smath
labelprivate:factory/swriter?slot=21051
cardprivate:factory/swriter?slot=21052
 Dim oDoc As Object
 oDoc = StarDesktop.loadComponentFromURL( _
      "private:factory/scalc, _
      "_blank", 0, Array() )

ThisComponent Edit

ThisComponent は実行される Basic のコードがドキュメントのライブラリにあるときは,そのドキュメントのオブジェクトです。しかし,アプリケーションのライブラリで ThisComponent が用いられたときはドキュメントがありません。このとき,ThisComponent はそのコードを実行したドキュメントのオブジェクトとなります。

CurrentComponent Edit

StarDesktop.CurrentComponent を用いると,別のドキュメントのライブラリにあるコードも実行したドキュメントのオブジェクトが返されるので,別のドキュメントからも使用できます。

 Sub CurrentComponent_test()
 Dim oDoc As Object
   oDoc = StarDesktop.CurrentComponent
   MsgBox oDoc.URL
 End Sub

ドキュメントをいくつか用意してどれか一つのドキュメントに上のコードを入れます。コードを実行すると実行したドキュメントの URL が表示されます。それぞれ実行したドキュメントのオブジェクトが返っていることが分かります。

ThisComponent と CurrentComponent Edit

ThisComponent と CurrentComponent 二つのどちらを使えばいいのでしょうか?

どちらかを選ぶときには,まず次のことを判断して決めます。

  • そのコードをどこのライブラリに入れておくか

OOoBasic のマクロコードを入れておく (保存しておく) ことができるのは次の二つです。

  • アプリケーションのライブラリ
  • ドキュメントごとのライブラリ

アプリケーションのライブラリに入れておくときには,ThisComponent を使うといいでしょう。

ドキュメントごとのライブラリに入れておくときには,もう一つ,次のことを判断して決めます。

  • コードをどこから実行するか

「コードをどこから実行するか」というのを,「そのコードを入れてあるドキュメント以外のドキュメントからも実行するかどうか」と言い換えます。

  • 「そのドキュメントからのみ実行する」 -> ThisComponent
  • 「他のドキュメントからも実行する」-> CurrentComponent

をそれぞれ使用することになります。

ドキュメントの種類 Edit

ドキュメントの種類を判断する必要がある時にはサポートされているサービス名を調べることでドキュメントの種類を区別することができます。

各ドキュメントはそれぞれ特有のサービスをサポートしています。特有なサービスは次のものです。

documentサービス名
writercom.sun.star.text.TextDocument
calccom.sun.star.sheet.SpreadsheetDocument
drawcom.sun.star.drawing.DrawingDocument
impresscom.sun.star.presentation.PresentationDocument
mathcom.sun.star.formula.FormulaProperties

これらのサービス名は大文字と小文字を正確に入力する必要があります。

このサービス名を ThisComponent などのドキュメントへのインターフェースに対して supportsService メソッドで判断します。

次のコードでは Writer ドキュメントかどうかを判断しています。

Sub document_1
Dim oDoc As Object
  oDoc = ThisComponent
  If oDoc.supportsService( "com.sun.star.text.TextDocument" ) Then
    MsgBox "Supported"
  Else
    MsgBox "Not Supported"
  End If
End Sub

ドキュメントの URL Edit

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

msgbox ThisComponent.getURL()

hasLocation メソッドで保存されているかどうか調べられます。

ドキュメントの種類とオブジェクト Edit

ドキュメントのオブジェクト構造はドキュメントの種類により異なります。

Writer ドキュメント Edit

writer_doc.png

  • ページの概念がなく単一のページです。
  • テキストにはセクション、段落があります。
  • ドローページが一つしかありません。

Draw, Impress ドキュメント Edit

drawimpress_doc.png

  • 複数のページがあります。
  • ページはドローページに対応します。

特定のドキュメントのオブジェクト Edit

ドキュメントオブジェクトを取得参照。


Attach file: filewriter_doc.png 614 download [Information] filedrawimpress_doc.png 631 download [Information]

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