StarSuite 8 Basic プログラミングガイド
  Search only this book
Download this book in PDF (1383 KB)

第 5 章 StarSuite ドキュメントの操作

StarSuite API は、可能な限り多数のタスクで共通した操作が行えることを念頭に設計されています。 このような方針は、ドキュメントの作成、オープン、保存、変換、印刷およびテンプレート管理を行うためのインターフェースやサービスについても該当します。 このような機能は、あらゆるドキュメントで行われる操作であるため、本章で最初に説明します。

StarDesktop

ドキュメント関係の操作で使用頻度の高いものとして、以下の 2 つのサービスが挙げられます。

  • com.sun.star.frame.Desktop サービスは、StarSuite のコアサービスとよく似た機能を担っています。 これにより、すべてのドキュメントウィンドウを管理する StarSuite のフレームオブジェクトを扱うための機能が提供されます。 またドキュメントの作成、オープン、インポートをする際にも、このサービスを使用します。

  • com.sun.star.document.OfficeDocument サービスは、個々のドキュメントオブジェクトに対する基本的な操作を提供します。 たとえばこのサービスには、ドキュメントの保存、エクスポート、印刷を行うためのメソッドが用意されています。

com.sun.star.frame.Desktop サービスは、StarSuite の起動時に自動的にオープンされます。 その際 StarSuite は、StarDesktop というグローバル名でアクセスされるオブジェクトを作成します。

StarDesktop のインターフェースで、もっとも重要なものが com.sun.star.frame.XComponentLoader です。 これは主として、ドキュメントの作成、インポート、オープンの操作を担う loadComponentFromURL メソッドをカバーしています。

StarDesktop というオブジェクト名の起源は、StarOffice 5 の時代にまで遡るもので、当時は StarDesktop という 1 つのアプリケーションにすべてのドキュメントを埋め込む形で処理していました。 StarSuite の現行バージョンでは、この StarDesktop を目に見える形で使用することはありません。 ただし StarDesktop という名称は、アプリケーション全体の基本オブジェクトであることが直感的に分かりやすいため、現在でも StarSuite のフレームオブジェクトに対して使われています。

基本的に StarDesktop オブジェクトは、 StarOffice 5 でルートオブジェクトとして扱われていた Application オブジェクトの後継者として位置づけられています。 ただし従来の Application オブジェクトとは異なり、こちらは主として新規ドキュメントのオープン処理を担当しています。 従来の Application オブジェクトで使われていた、StarSuite のオンスクリーン描画コントロール用の機能 (たとえば FullScreenFunctionBarVisibleHeightWidthTopVisible など) は、現在では使用されていません。


注 –

アクティブドキュメントへアクセスする際に、MS Word では Application.ActiveDocument を使用し、Excel では Application.ActiveWorkbook を使用するのに対して、StarSuite の場合は、StarDesktop がこれらの役割を果たします。 StarSuite 7 でアクティブドキュメントオブジェクトへアクセスするには、StarDesktop.CurrentComponent 属性を使用します。


StarSuite ドキュメントに関する基本知識

StarSuite ドキュメントを操作する際に、StarSuite の行うドキュメント管理に関する基本的な知識があると有用です。 このような知識としては、StarSuite ドキュメントでのファイル名の扱い方や、ファイル保存時に使用されるフォーマットなどが該当します。

ファイル名の URL 指定

StarSuite は、個々のプラットフォームに拘束されないアプリケーションとして設計されているため、ファイル名の取り扱いについても、Internet Standard RFC 1738 に準拠した URL 指定法を採用しています (URL 指定はオペレーティングシステムに依存しない)。 このため標準的なファイル名は、以下のプレフィックスが先頭に付きます。

file:///

そして、この後にローカルパスが続きます。 ファイル名にサブディレクトリを含む場合、ディレクトリ間の区切り記号は、Windows で用いられるバックスラッシュ (日本語フォントでは半角円記号) ではなく、フォワードスラッシュで区切ります。 たとえば以下のパスは、C ドライブ直下の doc ディレクトリにある test.sxw ファイルを示しています。

file:///C:/doc/test.sxw

ローカルのファイル名を URL に変換するには、StarSuite に用意されている ConvertToUrl 関数を使用します。 逆に URL をローカルファイル名に変換するには、StarSuite に用意されている ConvertFromUrl 関数を使用します。

MsgBox ConvertToUrl("C:\doc\test.sxw") 
      ' 結果は file:///C:/doc/test.sxw
MsgBox ConvertFromUrl("file:///C:/doc/test.sxw")    
      '  結果は c:\doc\test.sxw (Windows の場合)

このサンプルコードでは、ローカルのファイル名を URL に変換して、メッセージボックスに表示しています。 その次に、URL をローカルファイル名に変換して、メッセージボックスに表示しています。

Internet Standard RFC 1738 をベースにしたため、ファイル名に 0-9a-zA-Z の文字の使用が許可されています。 URL でこれ以外の文字を使用する場合は、エスケープ処理をする必要があります。 この処理は、エスケープする文字を Unicode の UTF-8 エンコーディング内の該当 16 進値に変換して、パーセント記号を前に付けることで行います。 たとえば、ローカルファイル名内に半角スペース記号がある場合、URL 内で半角スペース記号は %20 と表記します。

XML ファイルフォーマット

StarSuite はバージョン 6.0 より、XML ベースのファイルフォーマットを採用しました。 XML の採用により、他のプログラムでファイルを開いて編集することもできるようになっています。

ファイルの圧縮

XML は通常のテキストファイルをベースとしているので、一般に最終的なファイルサイズは非常に大きなものとなります。 このため StarSuite では、ファイルを ZIP 形式で圧縮して保存するようにしています。 ただし storeAsURL メソッドオプションを使用すると、XML ファイル形式で直接保存することができます。 詳細情報はstoreAsURL メソッドオプション」を参照してください。

ドキュメントの作成、オープン、インポート

ドキュメントのオープン、インポート、作成は、メソッドを使用して行います。

StarDesktop.loadComponentFromURL(URL, Frame, _
            SearchFlags, FileProperties)

ここで loadComponentFromURL の第 1 パラメータには、対象とするファイルの URL を指定します。

loadComponentFromURL の第 2 パラメータには、管理用に StarSuite が内部的に作成するウィンドウのフレームオブジェクト名を指定します。 通常ここには事前定義されている _blank という名前を使用しますが、この場合 StarSuite は新規ウィンドウを作成します。 その他にも _hidden という名前も指定できます。この場合は該当ドキュメントを読み込んで非表示状態にします。

実際、StarSuite ドキュメントを開くのに必要なのは上記 2 つのパラメータだけで、残り 2 つのパラメータは単なるプレースホルダ (ダミー値) として指定するだけです。

Dim Doc As Object
Dim Url As String
Dim Dummy() 

Url = "file:///C:/test.sxw"

Doc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, Dummy())

上記のサンプルコードでは、text.sxw ファイルを開いて、新規ウィンドウとして表示しています。

StarSuite Basic では、ここで説明した方式により任意の数のドキュメントを開くことができ、これらのドキュメントオブジェクトを操作することにより各ドキュメントを編集することもできます。


注 –

StarDesktop.loadComponentFromURL は、StarSuite API の従来バージョンにあった Documents.AddDocuments.Open メソッドに取って代わる存在です。


ドキュメントウィンドウの内容の書き換え

パラメータ Frame の値として、事前定義された _blank および _hidden という名前を指定すると、loadComponentFromURL の呼び出し時に StarSuite は新規ウィンドウを作成します。 ただし状況によっては、既存ウィンドウの内容を書き換える方が便利な場合もあります。 このような処理を行うには、ウィンドウのフレームオブジェクトに明示的な名前が付いている必要があります。 ただし、この名前の先頭には下線記号は使えないので注意が必要です。 また、該当するフレームワークが存在しない場合、これを作成するにはパラメータ SearchFlags を指定する必要があります。 パラメータ SearchFlags には、以下の定数値を指定できます。

SearchFlags = com.sun.star.frame.FrameSearchFlag.CREATE + _
         com.sun.star.frame.FrameSearchFlag.ALL

以下のサンプルコードは、フレームパラメータと SearchFlags を使って、オープン済みのウィンドウを書き換える方法を示しています。

Dim Doc As Object
Dim Dummy() 
Dim Url As String
Dim SearchFlags As Long

SearchFlags = com.sun.star.frame.FrameSearchFlag.CREATE + _
         com.sun.star.frame.FrameSearchFlag.ALL

Url = "file:///C:/test.sxw"
Doc = StarDesktop.loadComponentFromURL(Url, "MyFrame", _
      SearchFlags, Dummy)

MsgBox "Press OK to display the second document."

Url = "file:///C:/test2.sxw"
Doc = StarDesktop.loadComponentFromURL(Url, "MyFrame", _
      SearchFlags, Dummy)

この例ではまず最初に、フレーム名を MyFrame とした新規ウィンドウの中に、test.sxw という名前のファイルを開いています。 そしてメッセージボックスで操作の確認をしてから、ウィンドウの内容を test2.sxw というファイルに書き換えています。

loadComponentFromURL メソッドのオプション

loadComponentFromURL メソッドの第 4 パラメータは、PropertyValue というデータフィールドで、これはドキュメントのオープンと作成に関する各種のオプションを StarSuite に指定する際に使用します。 このデータフィールドについては、個々のオプションごとに PropertyValue 構造体を用意して、オプション名を示す文字列や必要な設定値を格納する必要があります。

loadComponentFromURL には以下のオプションを指定できます。

  • AsTemplate (ブール値) – これが True の場合、指定URLからドキュメントを読み込み、新規の無題ドキュメントとして表示します。 False の場合は、テンプレートファイルを編集モードで読み込みます。

  • CharacterSet (文字列) – ドキュメントで使用する文字列コードを指定します。

  • FilterName (文字列)loadComponentFromURL メソッドで使用する特殊なフィルタを指定します。 指定可能なフィルタ名は、ファイル \share\config\registry\instance\org\openoffice\office\TypeDetection.xml に定義されています。

  • FilterOptions (文字列) – フィルタの追加オプションを指定します。

  • JumpMark (文字列) – ドキュメントのオープン後に、JumpMark の指定位置にジャンプさせます。

  • Password (文字列) – パスワード保護したファイル用のパスワードを与えます。

  • ReadOnly (ブール値) – 読み取り専用ドキュメントとして開くかを指定します。

以下のサンプルコードは、FilterName オプションを使用して、コンマ区切りのテキストファイルを StarSuite Calc で開く方法を示しています。

Dim Doc As Object
Dim FileProperties(0) As New com.sun.star.beans.PropertyValue
Dim Url As String

Url = "file:///C:/csv.doc"

FileProperties(0).Name = "FilterName"
FileProperties(0).Value ="scalc: Text - txt - csv (StarSuite Calc)"

Doc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, FileProperties())

この場合の FileProperties データフィールドは 1 つの値しか使っていませんが、これは指定するオプションが 1 つだけだからです。 Filtername 属性は、StarSuite でオープンするファイルに対して StarSuite Calc のテキストフィルタを使用するかを指定しています。

新規ドキュメントの作成

URL 指定されたものがテンプレートであった場合、StarSuite は自動的に新規ドキュメントを作成します。

このような場合に空白ドキュメントが必要であれば、以下のような形式で URL に private:factory と指定します。

Dim Dummy() 
Dim Url As String
Dim Doc As Object

Url = "private:factory/swriter"
Doc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, Dummy())

上記のサンプルコードを実行すると、StarSuite Writer の空白ドキュメントが作成されます。

ドキュメントオブジェクト

前節で説明した loadComponentFromURL メソッドは、戻り値としてドキュメントオブジェクトを返します。 そのサポートする com.sun.star.document.OfficeDocument サービスは、以下の 2 つの主要なインターフェースを提供しています。

  • com.sun.star.frame.XStorable インターフェース: ドキュメントの保存処理を担当します。

  • com.sun.star.view.XPrintable インターフェース: ドキュメント印刷用のメソッドを提供します。


注 –

StarSuite 8 への移行に際して、大部分のドキュメントオブジェクトは、従来の機能をそのまま引き継いでいます。 たとえばドキュメントの保存や印刷に関するメソッドは、現行バージョンでもドキュメントオブジェクトが提供しています。 ただし、メソッドの名前やパラメータには、変更されたものがあります。


ドキュメントのエクスポートと保存

StarSuite ドキュメントの保存処理は、ドキュメントオブジェクトを通じて直接実行されます。 このような処理を行うには、com.sun.star.frame.XStorable インターフェースの store メソッドを、以下のような形で使用します。

Doc.store()

このメソッドは、ドキュメントへのメモリ割り当てがすでに終了している場合にのみ機能します。 ただしこの条件は、新規ドキュメントの場合には該当しません。 そのような場合は storeAsURL を使用します。 このメソッドは com.sun.star.frame.XStorable にも用意されており、以下のようにドキュメントの保存位置を指定する際に使用できます。

Dim URL As String
Dim Dummy()

Url = "file:///C:/test3.sxw"

Doc.storeAsURL(URL, Dummy())

これらのメソッドの他に com.sun.star.frame.XStorable には、ドキュメントの保存に関するいくつかのサポート用メソッドが用意されています。 これに該当するのが、以下のメソッドです。

  • hasLocation() – ドキュメントの URL 指定が完了しているかを確認します。

  • isReadonly() – ドキュメントが読み取り専用であるかを確認します。

  • isModified() – 前回保存時からドキュメントが変更されているかを確認します。

ドキュメント保存用のプログラムコードを構築する際には、これらのオプションを利用することで、変更箇所があるドキュメントのみ保存処理を進めたり、名前が指定されていない場合のみファイル名の指定を要求するなどの機能を組み込むことができます。

If (Doc.isModified) Then
   If (Doc.hasLocation And (Not Doc.isReadOnly)) Then
      Doc.store()
   Else
      Doc.storeAsURL(URL, Dummy())
   End If
End If

上記のサンプルコードでは、まず最初に、前回保存時からドキュメントが変更されているかを確認しています。 そして変更箇所がある場合のみ、残りの保存処理を継続します。 次に、ドキュメントの URL 指定の有無と、読み取り専用でないことを確認し、双方の条件を満たしている場合のみ、既存の URL に対してドキュメントを保存します。 URL 指定が完了していない場合、あるいは読み取り専用で開かれている場合は、URL を新規指定して保存する処理を行います。

storeAsURL メソッドオプション

loadComponentFromURL メソッドと同様に storeAsURL メソッドも PropertyValue データフィールドを使ったいくつかのオプションを指定できます。 これらのオプションは、StarSuite によるドキュメント保存に関する指定を行います。 storeAsURL メソッドで指定できるのは、以下のオプションです。

  • CharacterSet (文字列) – ドキュメントで使用する文字列コードを指定します。

  • FilterName (文字列)loadComponentFromURL メソッドで使用する特殊なフィルタを指定します。 指定可能なフィルタ名は、ファイル \share\config\registry\instance\org\openoffice\office\TypeDetection.xml に定義されています。

  • FilterOptions (文字列) – フィルタの追加オプションを指定します。

  • Overwrite (ブール値) – 既存ファイルを警告なしで上書きするかを指定します。

  • Password (文字列) – パスワード保護したファイル用のパスワードを与えます。

  • Unpacked (ブール値) – ドキュメント (非圧縮) をサブディレクトリに保存するかを指定します。

以下のサンプルコードは、storeAsURL での Overwrite オプションの使用例です。

Dim Doc As Object
Dim FileProperties(0) As New com.sun.star.beans.PropertyValue
Dim Url As String

' ... Docを 初期化

Url = "file:///c:/test3.sxw"

FileProperties(0).Name = "Overwrite"
FileProperties(0).Value = True

Doc.storeAsURL(sUrl, mFileProperties())

このサンプルコードでは、同名のファイルが存在した場合、指定ファイル名で Doc を保存します。

ドキュメントの印刷

ドキュメントの保存と同様に、ドキュメントの印刷も該当オブジェクトから直接行えます。 このような操作には、com.sun.star.view.Xprintable インターフェースの Print メソッドを使用します。 以下のサンプルコードは、print メソッドを呼び出す際の基本パターンです。

Dim Dummy()

Doc.print(Dummy())

loadComponentFromURL メソッドの場合と同様に、パラメータの Dummy には PropertyValue データフィールドを使用し、この値を通じて StarSuite の印刷オプションを指定します。

print メソッドのオプション

print メソッドのパラメータは PropertyValue データフィールドの形で与えますが、その値には StarSuite の印刷用ダイアログの項目に対応した内容を指定します。

  • CopyCount (整数) – 印刷する部数を指定します。

  • FileName (文字列) – 印刷するドキュメントを指定します。

  • Collate (ブール値) – プリンタに対して印刷の丁合に関する指定を行います。

  • Sort (ブール値) – 複数部数を印刷する際に (CopyCount > 1) ページをソートさせるかを指定します。

  • Pages (文字列) – 印刷するページを指定します (表記規則は印刷用ダイアログのものと同じ)。

以下のサンプルコードでは、Pages オプションを使って特定ページのみを印刷します。

Dim Doc As Object
Dim PrintProperties(0) As New com.sun.star.beans.PropertyValue

PrintProperties(0).Name="Pages"
PrintProperties(0).Value="1-3; 7; 9"

Doc.print(PrintProperties())

プリンタの選択と設定

プリンタの選択には、com.sun.star.view.XPrintable インターフェースの Printer 属性を使用します。 この属性には、PropertyValue データフィールドを使って、以下の内容を設定します。

  • Name (文字列) – プリンタの名前を指定します。

  • PaperOrientation (列挙型) – 用紙方向を指定します (縦にする場合は com.sun.star.view.PaperOrientation.PORTRAIT、横にする場合は com.sun.star.view.PaperOrientation.LANDSCAPE)。

  • PaperFormat (列挙型) – 用紙フォーマットを指定します (たとえば A4 の場合はcom.sun.star.view.PaperFormat.A4、US レターの場合は com.sun.star.view.PaperFormat.Letter).

  • PaperSize (サイズ) – 用紙サイズを 100 分の 1 ミリ単位で指定します。

以下のサンプルコードでは、Printer 属性を使ってプリンタを選択し、用紙サイズを設定します。

Dim Doc As Object
Dim PrinterProperties(1) As New com.sun.star.beans.PropertyValue
Dim PaperSize As New com.sun.star.awt.Size

PaperSize.Width = 20000   ' corresponds to 20 cm
PaperSize.Height = 20000   ' corresponds to 20 cm

PrinterProperties (0).Name="Name"
PrinterProperties (0).Value="My HP Laserjet"

PrinterProperties (1).Name="PaperSize"
PrinterProperties (1).Value=PaperSize

Doc.Printer = PrinterProperties()

ここでは、PaperSize という名前で com.sun.star.awt.Size タイプのオブジェクトを作成します。 用紙サイズの指定には、このタイプのオブジェクトが必要です。 同様に、PrinterProperties という名前で PropertyValue タイプのデータフィールドを作成します。 このデータフィールドには、初期化もかねて Printer 属性に渡す値を代入します。 なお UNO では、プリンタはリアル属性ではなくイミテーション属性として扱われます。

テンプレート

テンプレートとは、様々な書式設定情報を 1 つにまとめて、名前を付けたものです。 StarSuite アプリケーションでは、各種のテンプレートを利用して、書式設定の操作を簡略化します。 テンプレートの登録情報が変更されると、StarSuite ドキュメントの該当セクションも自動的に更新されます。 このような機能を利用すると、たとえばテンプレートを変更して、すべてのレベル 1 ヘッダの表示フォントを一括変更する、などの操作が行えます。 StarSuite では、ドキュメントの種類ごとに該当するテンプレートが自動判別されます。

StarSuite Writer は以下のテンプレートをサポートしています。

  • 文字テンプレート

  • 段落テンプレート

  • フレームテンプレート

  • ページテンプレート

  • ナンバリングテンプレート

StarSuite Calc は以下のテンプレートをサポートしています。

  • セルテンプレート

  • ページテンプレート

StarSuite Impress は以下のテンプレートをサポートしています。

  • 文字要素テンプレート

  • プレゼンテーションテンプレート

StarSuite で利用する各種のテンプレートは、com.sun.star.style.StyleFamily サービスに基づいて、StyleFamilies として管理されています。 StyleFamilies にはドキュメントオブジェクトを通じてアクセスします。

Dim Doc As Object
Dim Sheet As Object
Dim StyleFamilies As Object 
Dim CellStyles As Object

Doc = StarDesktop.CurrentComponent
StyleFamilies = Doc.StyleFamilies
CellStyles = StyleFamilies.getByName("CellStyles")

このサンプルコードでは、表計算ドキュメントの StyleFamilies 属性を用いて、使用可能なすべてのセルテンプレートの一覧を取得します。

個々のテンプレートには、インデックスを使って直接アクセスできます。

Dim Doc As Object
Dim Sheet As Object
Dim StyleFamilies As Object 
Dim CellStyles As Object
Dim CellStyle As Object
Dim I As Integer

Doc = StarDesktop.CurrentComponent
StyleFamilies = Doc.StyleFamilies
CellStyles = StyleFamilies.getByName("CellStyles")

For I = 0 To CellStyles.Count - 1
   CellStyle = CellStyles(I)
   MsgBox CellStyle.Name
Next I

1 つ前のサンプルコードでは、すべてのセルテンプレートをメッセージボックスに一括表示しましたが、ここではループを使って個別に表示します。

書式設定オプションの詳細

各テンプレートには、独自の書式設定属性が存在します。 以下に、主要な書式設定属性とその説明箇所を示します。

  • 文字の属性、第 6 章「文書ドキュメント」com.sun.star.style.CharacterProperties サービス

  • 段落の属性、第 6 章「文書ドキュメント」com.sun.star.text.Paragraph サービス

  • セルの属性、第 7 章「表計算ドキュメント」com.sun.star.table.CellProperties サービス

  • ページの属性、第 7 章「表計算ドキュメント」com.sun.star.style.PageStyle サービス

  • 文字要素の属性、第 7 章「表計算ドキュメント」さまざまなサービス

書式設定属性は、ここでの説明に用いたアプリケーションにのみ限定されるわけでなく、より広範に利用されます。 たとえば、第 7 章「表計算ドキュメント」で説明するページ属性の大部分は、StarSuite Calc だけでなく StarSuite Writer でも使用できます。

テンプレートの使用法に関する詳細情報については、第 6 章「文書ドキュメント」の「文字と段落属性のデフォルト値」を参照してください。