Contained WithinFind More DocumentationFeatured Support Resources | Download this book in PDF (1383 KB)
第 6 章 文書ドキュメント文書ドキュメントには、プレーンテキストだけでなく、書式設定に関する情報も記録されます。 通常このような文字装飾は、テキストの各所に施されます。 またテーブル (表) を作成するような場合、このような構造はより複雑化します。 これは単なる 1 次元の文字列情報ではなく、2 次元フィールドと成るためです。 更に現在のワードプロセッサでは、図形描画オブジェクトを始め、テキスト枠やその他各種のオブジェクトを文章中に配置できるようになっています。 またこれらのオブジェクトの配置位置も、テキストの間に限定されるものではなく、ページ上の任意の位置にレイアウトされる場合もあります。 本章では、文書ドキュメントで使われる主なインターフェースとサービスを取り上げます。 最初の節では、文書ドキュメントの構造について説明し、StarSuite ドキュメント上で繰り返し行うタイプの処理を StarSuite Basic プログラムで自動化する方法を説明します。 ここでは特に、段落や段落部位およびこれらの書式設定に焦点を当てます。 次の節では、文書ドキュメントでの処理の効率化を検討します。 StarSuite には TextCursor オブジェクトなど各種のサポートオブジェクトが用意されており、これらを利用することで、最初の節で説明した以上の処理を行えるようになります。 3 番目の節では、テキスト以外の処理を説明します。 対象となるのは、テーブル、テキスト枠、テキストフィールド、テキストマーク、コンテンツディレクトリなどです。 ドキュメントの作成、オープン、保存、印刷法については、文書ドキュメントだけでなく他のドキュメントにも共通する内容であるため、第 5 章「StarSuite ドキュメントの操作」で説明してあります。 文書ドキュメントの構造文書ドキュメントには、以下の 4 種類の情報が記録されています。
本節では特に、テキストおよびその書式設定オプションについて説明します。 注 – StarSuite Writer の StarSuite 8 API は、前バージョンから大きく変更されています。 旧バージョンの API は Selection オブジェクトによる操作を中心に構成されており、エンドユーザー用のユーザーインターフェースを主眼に置いて、マウス操作による強調処理を重点的に扱っていました。 StarSuite 8 API では、このような関係をユーザーインターフェースとプログラマインターフェースの間に置き換えています。 これにより、アプリケーションの各部に対して並列アクセスをするプログラミングが可能となり、ドキュメント内に存在する複数のオブジェクトを同時に処理することができるようになりました。 また従来の Selection オブジェクトは、現行バージョンでは使用できなくなっています。 段落と段落部位文書ドキュメントは、段落の集合であるとも言えます。 しかしこのような段落は、個別的な名前やインデックスが付けられているわけでもないため、直接アクセスする方法はありません。 その代わり段落へのアクセスは、第 4 章「StarSuite API について」で説明されている Enumeration オブジェクトを用いた順次アクセスが行えます。 段落を編集する場合は、このような機能を利用します。 ただし Enumeration オブジェクトで取得される対象には、段落だけでなくテーブルも含まれるので、注意が必要です (StarSuite Writer では、テーブルを特殊な段落として処理)。 このため、取得したオブジェクトへアクセスする際には、そのオブジェクトが段落を示す com.sun.star.text.Paragraph サービスをサポートしているのか、テーブルを示す com.sun.star.text.TextTable サービスをサポートしているのかを確認する必要があります。 以下のサンプルコードでは、ループを使って文書ドキュメントの内容に順次アクセスして、各インスタンスごとに該当オブジェクトが段落であるかテーブルであるかを、メッセージ表示します。 Dim Doc As Object
Dim Enum As Object
Dim TextElement As Object
' ドキュメントオブジェクトの作成
Doc = StarDesktop.CurrentComponent
' Enumeration オブジェクトの作成
Enum = Doc.Text.createEnumeration
' 全テキスト要素へのアクセス用ループ
While Enum.hasMoreElements
TextElement = Enum.nextElement
If TextElement.supportsService("com.sun.star.text.TextTable") Then
MsgBox "The current block contains a table."
End If
If TextElement.supportsService("com.sun.star.text.Paragraph") Then
MsgBox "The current block contains a paragraph."
End If
Wend
このサンプルコードでは、Doc というドキュメントオブジェクトを作成して、現在の StarSuite ドキュメントを参照しています。 次にこの Doc オブジェクトを使って Enumeration オブジェクトを作成して、テキストの各部 (段落およびテーブル) に順次アクセスして、TextElement というオブジェクトに現在の要素を取得します。 そして supportsService メソッドを使って、TextElement の内容が段落かテーブルかを判定しています。 段落段落の内容にアクセスするには、com.sun.star.text.Paragraph サービスを使用します。 そして段落中のテキストの取得および変更には、String 属性を使用します。 Dim Doc As Object
Dim Enum As Object
Dim TextElement As Object
Doc = StarDesktop.CurrentComponent
Enum = Doc.Text.createEnumeration
While Enum.hasMoreElements
TextElement = Enum.nextElement
If TextElement.supportsService("com.sun.star.text.Paragraph") Then
TextElement.String = Replace(TextElement.String, "you", "U")
TextElement.String = Replace(TextElement.String, "too", "2")
TextElement.String = Replace(TextElement.String, "for", "4")
End If
Wend
このサンプルコードでは、現在の文書ドキュメントを開いて、その内容に Enumeration オブジェクトを用いて順次アクセスしています。 そして各段落の TextElement.String 属性を使用して、you、too、for の各単語をそれぞれ U、2、4 の文字に置き換えています なお、ここで使っている Replace という関数は、StarSuite Basic に用意されているものではありません。 これは、第 3 章「StarSuite Basic の実行時ライブラリ」の「検索と置換」の節でサンプルコードとして説明してある関数です。 注 – ここで説明した段落テキストへのアクセス手順は、VBA の場合の Paragraphs によるリスト作成に該当するもので、これらは Range および Document オブジェクトから使用できます。 VBA の場合、段落へのアクセスは番号指定で行えますが (たとえば Paragraph(1) など)、StarSuite Basic の場合は、ここで説明した Enumeration オブジェクトを使用する必要があります。 VBA の Characters、Sentences、Words リストに直接該当する機能は、StarSuite Basic には用意されていません。 ただし、TextCursor の機能を利用することで、文字、段落、ワード単位での操作を行えます (詳細は「TextCursor」を参照)。 段落部位上記のサンプルコードを実行すると、テキストの置換は成功しても、書式設定が崩れるような場合があります。 このような現象は、個々の段落が独立したサブオブジェクトから構成されていることに原因があります。 これら各サブオブジェクトは、独自の書式設定情報を保持しています。 たとえば、中央部の 1 つの単語だけに太字の書式設定が行われた段落がある場合、StarSuite はこの段落を、太字テキストよりも前の部分、太字テキストの部分、太字テキストよりも後の通常テキストの部分という、3 つの段落部位として扱います。 この段落のテキストを String 属性を使って変更する場合、StarSuite は該当する段落部位をいったん削除してから新規に段落部位を挿入するという方法で処理を進めます。 この際に、変更前の書式設定は失われてしまいます。 このような現象を回避するには、段落全体ではなく該当する段落部位にアクセスするようにします。 このような処理を行うため、各段落には Enumeration オブジェクトが用意されています。 以下のサンプルコードは、先のサンプルコードと同様の置換処理を実行しますが、ここではループを二重にすることで、文書ドキュメント内のすべての段落および、各段落を構成するすべての段落部位にアクセスするようにしています。 Dim Doc As Object
Dim Enum1 As Object
Dim Enum2 As Object
Dim TextElement As Object
Dim TextPortion As Object
Doc = StarDesktop.CurrentComponent
Enum1 = Doc.Text.createEnumeration
' 全段落へのアクセス用ループ
While Enum1.hasMoreElements
TextElement = Enum1.nextElement
If TextElement.supportsService("com.sun.star.text.Paragraph") Then
Enum2 = TextElement.createEnumeration
' 全サブ段落へのアクセス用ループ
While Enum2.hasMoreElements
TextPortion = Enum2.nextElement
MsgBox "'" & TextPortion.String & "'"
TextPortion.String = Replace(TextPortion.String, "you", "U")
TextPortion.String = Replace(TextPortion.String, "too", "2")
TextPortion.String = Replace(TextPortion.String, "for", "4")
Wend
End If
Wend
このサンプルコードでは、二重ループを使って文書ドキュメントの内容に順次アクセスしています。 外周部のループは、段落単位のアクセスを担当しています。 そして内周部のループは、各段落を構成する段落部位のアクセスを担当しています。 このようにしてアクセスした段落部位に対しては、先のサンプルコードと同様に、文字列の String 属性を使用してテキストの置き換えを行なっています。 ただしこのサンプルコードでは、個々の段落部位ごとに変更するようにしているので、テキストの置換を行なっても書式設定情報は保持されます。 書式設定テキストの書式設定を行う方法は、複数あります。 一番簡単な方法は、書式設定用属性をテキストに直接指定することです。 このような方式は、ダイレクトフォーマッティングと呼ばれます。 通常このようなダイレクトフォーマッティングが使われるのは、マウス操作による逐次的な書式設定が行えるような、比較的小さめのドキュメントです。 より具体的に言えば、ユーザーがマウスを直接操作してテキスト内の特定の単語を太字にしたり、1 行だけを中央揃えにする場合が、これに該当します。 書式設定は、ダイレクトフォーマッティング以外にも、テンプレートを使って行うことができます。 このような方式を、インダイレクトフォーマッティングと呼びます。 インダイレクトフォーマッティングは、あらかじめ定義しておいたテンプレートを、該当テキストに適用することで実施します。 このようなテキストの書式設定を後から変更する場合は、テンプレートを変更するだけで済みます。 StarSuite はテンプレートへの変更を、該当するすべてのテキストに対して一括適用します。 注 – 通常 VBA では、書式設定用属性は複数のサブオブジェクトに分散しています (たとえば Range.Font、Range.Borders、Range.Shading、Range.ParagraphFormat など) これらの属性はカスケード式に指定します (たとえば Range.Font.AllCaps)。 これに対して StarSuite Basic では、該当オブジェクトに対して書式設定用属性を直接指定できます (TextCursor、Paragraph など)。 StarSuite に用意されている文字および段落関係の属性については、以下の 2 つの節で説明しています。 注 – StarSuite API の従来バージョンでは、テキストの書式設定は基本的に Selection オブジェクトとその下位オブジェクトを使って行なっていました (たとえば Selection.Font、Selection.Paragraph、Selection.Border など)。 新しい API では、個々のオブジェクト (Paragraph、TextCursor など) ごとに書式設定用の属性が用意されており、これらの指定を直接行えるようになっています。 このような操作に使用する文字および段落関係の属性については、以下の節で説明しています。 文字属性ここでは、個々の文字に対する書式設定属性を、文字属性と総称します。 このようなものには、太字やフォントなどの書体指定が該当します。 文字属性を使えるオブジェクトは、com.sun.star.style.CharacterProperties サービスをサポートしているものに限られます。 StarSuite には、これに該当する各種のサービスが存在します。 たとえば先に説明した、段落に対する com.sun.star.text.Paragraph サービスや、段落部位に対する com.sun.star.text.TextPortion サービスなども、その中に含まれます。 com.sun.star.style.CharacterProperties サービスは、何らかのインターフェースを提供するものではなく、文字属性の指定と取得を行う各種の属性を提供します。 すべての文字属性のリストについては、StarSuite の「API reference」を参照してください。 以下に主要な属性を示します。
段落属性個々の文字に対してではなく、段落全体に対して施される書式設定の情報は、段落属性と総称されます。 このような情報としては、用紙と段落の間の余白や行間の大きさなどが該当します。 段落属性は、com.sun.star.style.ParagraphProperties サービスを通じて使用します。 段落属性は、各種のオブジェクトで利用できます。 com.sun.star.text.Paragraph サービスをサポートするすべてのオブジェクトは、com.sun.star.style.ParagraphProperties の段落属性もサポートしています。 すべての段落属性のリストについては、StarSuite の『API reference』を参照してください。 以下に主要な段落属性を示します。
例: HTML の簡易エクスポート以下のサンプルコードは、書式設定情報の操作例です。 ここでは、文書ドキュメントを順次読み取り、HTML 形式ファイルへの簡易的な変換を行なっています。 基本的な変換処理としては、個々の段落の先頭に HTML タグの <P> を付加します。 同様に、太字指定のされた段落部位には HTML タグの <B> を付けるよう処理しています。 Dim FileNo As Integer, Filename As String, CurLine As String
Dim Doc As Object
Dim Enum1 As Object, Enum2 As Object
Dim TextElement As Object, TextPortion As Object
Filename = "c:\text.html"
FileNo = Freefile
Open Filename For Output As #FileNo
Print #FileNo, "<HTML><BODY>"
Doc = StarDesktop.CurrentComponent
Enum1 = Doc.Text.createEnumeration
' 全段落へのアクセス用ループ
While Enum1.hasMoreElements
TextElement = Enum1.nextElement
If TextElement.supportsService("com.sun.star.text.Paragraph") Then
Enum2 = TextElement.createEnumeration
CurLine = "<P>"
' 全段落部位へのアクセス用ループ
While Enum2.hasMoreElements
TextPortion = Enum2.nextElement
If TextPortion.CharWeight = com.sun.star.awt.FontWeight.BOLD THEN
CurLine = CurLine & "<B>" & TextPortion.String & "</B>"
Else
CurLine = CurLine & TextPortion.String
End If
Wend
' 行の出力
CurLine = CurLine & "</P>"
Print #FileNo, CurLine
End If
Wend
' HTML の出力
Print #FileNo, "</BODY></HTML>"
Close #FileNo
このサンプルコードの基本構造は、先に説明した段落部位へアクセスするサンプルコードと同じものです。 今回追加されたものは、HTML ファイルの書き出し処理および、テキストが太字であるかをチェックして該当する段落部位を HTML タグで囲むよう処理するコードです。 文字と段落属性のデフォルト値文字および段落属性の書式設定としては、常にダイレクトフォーマッティングがインダイレクトフォーマッティングより優先されます。 これはつまりテンプレートによる書式設定よりも、テキストへの直接操作による書式設定の方が優先されるということになります。 ドキュメントの特定セクションが、ダイレクトフォーマッティングされたのか、インダイレクトフォーマッティングされたのかは、簡単には確認できません。 StarSuite のオブジェクトバーには、本文テキストに設定されたフォント、太さ、サイズなどの属性が表示されます。 しかし、このような書式設定がテンプレートによるものか、直接設定したものかについては表示されません。 特定の属性については、StarSuite Basic の getPropertyState メソッドを使うことで、どのように書式設定されているかを確認することができます。 この場合に渡すパラメータには属性名を指定し、戻り値としては書式設定の出所を示す定数が返されます。 このような定数としては、com.sun.star.beans.PropertyState に定義された以下の値が使われます。
以下のサンプルコードでは、書式設定用属性が StarSuite 内でどのように編集されているかを調べます。 ここでは、個々の段落部位にダイレクトフォーマッティングにより太字にされたものがあるかをチェックします。 そして該当する段落部位があると、setPropertyToDefault メソッドを用いてダイレクトフォーマッティングによる書式指定を解除して、MyBold という文字テンプレートを適用させています。 Dim Doc As Object
Dim Enum1 As Object
Dim Enum2 As Object
Dim TextElement As Object
Dim TextPortion As Object
Doc = StarDesktop.CurrentComponent
Enum1 = Doc.Text.createEnumeration
' 全段落へのアクセス用ループ
While Enum1.hasMoreElements
TextElement = Enum1.nextElement
If TextElement.supportsService("com.sun.star.text.Paragraph") Then
Enum2 = TextElement.createEnumeration
' 全段落部位へのアクセス用ループ
While Enum2.hasMoreElements
TextPortion = Enum2.nextElement
If TextPortion.CharWeight = _
com.sun.star.awt.FontWeight.BOLD AND _
TextPortion.getPropertyState("CharWeight") = _
com.sun.star.beans.PropertyState.DIRECT_VALUE Then
TextPortion.setPropertyToDefault("CharWeight")
TextPortion.CharStyleName = "MyBold"
End If
Wend
End If
Wend
文書ドキュメントの編集文書ドキュメントの編集に関しては、すでに前節で、段落および段落部位へのアクセスを行う com.sun.star.text.TextPortion と com.sun.star.text.Paragraph サービスを中心に説明しました。 これらのサービスの利用が適しているのは、各ループごとに 1 度ずつテキストの編集を行うタイプの作業です。 しかし、このような方式では対処し得ない処理も存在します。 StarSuite に用意されている com.sun.star.text.TextCursor サービスは、ドキュメントを逆方向に遡って処理したり、センテンスや単語単位で操作するといった、より複雑な処理を行うためのもので、TextPortion を使うよりもこのような操作に適しています。 TextCursorStarSuite API の TextCursor は、StarSuite ドキュメント上の操作で表示されるカーソルに該当するものです。 これを使用すると、文書ドキュメント上の特定位置を操作対象に指定して、コマンド指定による各種の選択処理を行うことができます。 ただし、このような StarSuite Basic の TextCursor オブジェクトを、通常のカーソルと混同してはいけません。 両者は、本質的に異なるものです。 注 – これらの名称については、VBA の用語と異なっている場合があるので注意が必要です。 VBA の Range オブジェクトの機能に該当するものは、StarSuite の TextCursor オブジェクトであって、同じ名前を持つ StarSuite の Range オブジェクトに相当するものではありません。 たとえば、StarSuite の TextCursor オブジェクトはドキュメント内の移動やテキストの変更という機能を担っていますが、このような処理を VBA では Range オブジェクトで処理します (MoveStart、MoveEnd、InsertBefore、InsertAfterなど)。 StarSuite の TextCursor オブジェクトに該当する機能は、以下の節で説明しています。 テキスト内の移動StarSuite Basic の TextCursor オブジェクトは、文書ドキュメント上に表示される通常のカーソルとは異なるものです。 このため、TextCursor オブジェクトの表示位置をプログラム制御で変更しても、通常のカーソルは何の影響も受けません。 また TextCursor オブジェクトは、同一オブジェクト上の異なる位置に複数オープンすることが可能で、相互に独立した形で個別制御できます。 TextCursor オブジェクトの作成には、以下のような形式で createTextCursor を使用します。 Dim Doc As Object Dim Cursor As Object Doc = StarDesktop.CurrentComponent Cursor = TextDocument.Text.createTextCursor() ここで作成した Cursor というオブジェクトは、com.sun.star.text.TextCursor サービスをサポートしており、文書ドキュメント内のテキストを移動するための各種メソッドを利用できます。 たとえば以下のサンプルコードは、最初に TextCursor を 10 文字分左に移動してから、3 文字分右に移動します。 Cursor.goLeft(10, False) Cursor.goRight(3, False) TextCursor は、選択範囲の強調表示にも使用できます。 このような処理は、マウスでテキストの一部を選択して強調させる操作に相当します。 上記のサンプルコードでパラメータとして渡した False は、オブジェクトの移動に伴う通過部分を強調表示させるかどうかの指定です。 このような TextCursor の挙動は、以下のサンプルコードと対比させると分かりやすいでしょう。 Cursor.goLeft(10, False) Cursor.goRight(3, True) この場合も最初に 10 文字分左に移動させてますが、このときは強調表示しないで、次に 3 文字分右に移動させる際には、強調表示するようにしています。 つまりこのサンプルコードで TextCursor が強調表示するのは、最初の位置から 8 番目から 10 番目の文字までとなります。 以下に、com.sun.star.text.TextCursor サービスの移動操作に用いる主要なメソッドを示します。
個々のセンテンス (文章) 間の区切りは、センテンス末を示す記号を基準に処理されます。 たとえばピリオドは、このようなセンテンス末の記号として認識されます。 Expand パラメータは、オブジェクトの移動に伴う通過部分を強調表示させるかを、ブール値を用いて指定します。 またこれらの移動操作用メソッドは、移動処理に成功したか、あるいは移動先となるテキスト位置の不在により処理が中断されたかを、戻り値として返します。 以下に、com.sun.star.text.TextCursor サービスをサポートし、TextCursor を使用して強調表示した範囲を編集する代表的なメソッドを示します。 TextCursor によるテキストの書式設定com.sun.star.text.TextCursor サービスは、本章の冒頭で説明した文字および段落関係の属性をすべてサポートしています。 以下のサンプルコードは、TextCursor を用いたこれらの使用例です。 ここでは、ドキュメントの内容に順次アクセスして、各センテンスの先頭ワードに対して太字の書式を設定します。 Dim Doc As Object Dim Cursor As Object Dim Proceed As Boolean Doc = StarDesktop.CurrentComponent Cursor = Doc.Text.createTextCursor Do Cursor.gotoEndOfWord(True) Cursor.CharWeight = com.sun.star.awt.FontWeight.BOLD Proceed = Cursor.gotoNextSentence(False) Cursor.gotoNextWord(False) Loop While Proceed このサンプルコードではまず、テキストの取得に使うドキュメントオブジェクトを作成しています。 そして、ループを使ってセンテンス単位でテキストを読み取り、先頭ワードを強調表示して、太字の書式を設定します。 テキストの取得と変更TextCursor による強調表示部分に対しては、TextCursor オブジェクトの String 属性によるテキスト操作が可能です。 以下のサンプルコードでは、String 属性を用いて、センテンスの先頭ワードをメッセージボックスに表示します。 Dim Doc As Object Dim Cursor As Object Dim Proceed As Boolean Doc = StarDesktop.CurrentComponent Cursor = Doc.Text.createTextCursor Do Cursor.gotoEndOfWord(True) MsgBox Cursor.String Proceed = Cursor.gotoNextSentence(False) Cursor.gotoNextWord(False) Loop While Proceed このような String 属性を使った手法は、センテンスの先頭ワードを変更する場合にも利用できます。 Dim Doc As Object Dim Cursor As Object Dim Proceed As Boolean Doc = StarDesktop.CurrentComponent Cursor = Doc.Text.createTextCursor Do Cursor.gotoEndOfWord(True) Cursor.String = "Ups" Proceed = Cursor.gotoNextSentence(False) Cursor.gotoNextWord(False) Loop While Proceed TextCursor によりテキストを強調表示した状態で、String 属性に文字列を代入すると、該当部のテキストが新規の文字列に置き換えられます。 強調表示されていない場合、文字列は TextCursor 位置に挿入されます。 制御コードの挿入状況によっては、ドキュメント上に表示される実際のテキストではなく、表示形態の方を変更したい場合もあります。 StarSuiteは、このような表示形態の一部を制御コードを用いて処理します。 これらの制御コードは、テキスト内に挿入することで、その表示形態を整えます。 個々の制御コードは com.sun.star.text.ControlCharacter で定数として定義されています。 以下に、StarSuite で使用可能な制御コードを示します。
制御コードを挿入するには、挿入位置だけではなく、該当するドキュメントオブジェクトも指定する必要があります。 以下のサンプルコードでは、20 番目の文字の次に段落区切りを挿入します。 Dim Doc As Object Dim Cursor As Object Dim Proceed As Boolean Doc = StarDesktop.CurrentComponent Cursor = Doc.Text.createTextCursor Cursor.goRight(20, False) Doc.Text.insertControlCharacter(Cursor, _ com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False) insertControlCharacter メソッドの呼び出しで、パラメータに False を指定しているのは、挿入処理後も TextCursor による強調表示部分を保持させるためです。 ここでパラメータに True を指定すると、insertControlCharacter は、該当部のテキストを置き換えます。 テキスト部位の検索使用頻度の高い操作として、文書ドキュメント内にある特定の文字列を検索して、その位置にあるテキストを編集するという処理があります。 このような処理を行うため、すべての StarSuite ドキュメントには特殊なインターフェースが用意されていますが、このインターフェースによる検索を行う際は、SearchDescriptor と呼ばれるオブジェクトを事前に作成しておく必要があります。 これにより、ドキュメントの検索する対象が StarSuite に指定されます。 SearchDescriptor は com.sun.star.util.SearchDescriptor サービスをサポートしたオブジェクトで、以下のサンプルコードのように createSearchDescriptor メソッドを用いて作成します。 Dim SearchDesc As Object SearchDesc = Doc.createSearchDescriptor 作成した SearchDescriptor に対しては、以下のようにして検索するテキストを指定します。 SearchDesc.searchString="any text" このように SearchDescriptor は、通常の StarSuite 操作で使う検索ダイアログに相当する機能を担っています。 また、検索ダイアログに各種の検索設定があるように、同様の設定を SearchDescriptor オブジェクトに対しても指定できます。 このような属性は、com.sun.star.util.SearchDescriptor サービスに用意されています。 StarSuite Basic では、 StarSuite の SearchSimilarity (いわゆる「ファジーマッチ」) 機能を利用できます。 この機能を使うと、指定文字列と類似した文字列を StarSuite に検索させることができます。 このような検索を行う際には、オリジナルの検索文字列に対して追加、削除、変更可能な文字数をそれぞれ指定できます。 このような指定には、以下に示す com.sun.star.util.SearchDescriptor サービスの関連属性を使用します。 SearchDescriptor に関する必要な指定の終了後、文書ドキュメントに対する検索を実行します。 このような処理には、StarSuite に用意されている findFirst および findNext メソッドを使用します。 Found = Doc.findFirst (SearchDesc) Do While Found ' 検索処理 Found = Doc.findNext( Found.End, Search) Loop このサンプルコードでは、ループを使って検索該当箇所をすべて探し、検索にヒットしたテキストを参照する TextRange オブジェクトを取得しています。 例: 類似検索以下のサンプルコードは、「turnover」という単語を検索して、該当箇所に太字の書式を設定します。 ここでは類似検索を用いて、「turnover」に完全に一致するものだけでなく、複数形の「turnovers」を始め「turnover's」なども検索にヒットするようにしています。 なお類似性の度合いとしては、オリジナルの検索文字列に対して 2 文字までの違いを許容させることにします。 Dim SearchDesc As Object Dim Doc As Object Doc = StarDesktop.CurrentComponent SearchDesc = Doc.createSearchDescriptor SearchDesc.SearchString="turnover" SearchDesc.SearchSimilarity = True SearchDesc.SearchSimilarityAdd = 2 SearchDesc.SearchSimilarityExchange = 2 SearchDesc.SearchSimilarityRemove = 2 SearchDesc.SearchSimilarityRelax = False Found = Doc.findFirst (SearchDesc) Do While Found Found.CharWeight = com.sun.star.awt.FontWeight.BOLD Found = Doc.findNext( Found.End, Search) Loop 注 – StarSuite で検索と置換の処理を行う場合、その基本的な考えは VBA と同じです。 どちらも、検索と置換に使用する属性を 1 つのオブジェクトに収めることにより指定します。 そして、このオブジェクトを処理対象のテキスト範囲に対して渡すことにより検索や置換の実際の処理を開始します。 ただしこのような補助オブジェクトは、VBA では Range オブジェクトの Find 属性で処理できるのに対して、StarSuite Basic では、ドキュメントオブジェクト側から createSearchDescriptor または createReplaceDescriptor を呼び出して作成する必要があります。 その他、検索用の属性やメソッドにも違いがあります。 従来の StarSuite API 同様に現行の API でも、テキストの検索や置換は、ドキュメントオブジェクトを通じて実行します。 ただし従来は、検索オプションの指定などを SearchSettings というオブジェクトで行なっていましたが、現在はテキストの置換処理用に用意された SearchDescriptor および ReplaceDescriptor オブジェクトを使用します。 これらのオブジェクトには、検索オプションだけでなく、検索文字列を指定することが可能で、必要であれば置換文字列も格納できます。 これらのオプション指定用オブジェクトは、ドキュメントオブジェクトを用いて作成してから、必要なオプション値を代入し、検索メソッド用のパラメータの形でドキュメントオブジェクトに引き渡します。 テキスト部位の置換検索の場合と同様、StarSuite で行う通常の置換操作も、StarSuite Basic 上で実行できます。 置換処理に必要な手順は、検索処理の場合と基本的に同じです。 置換の場合も、最初にオプション指定用の特殊オブジェクトを作成します。 このオブジェクトは ReplaceDescriptor と呼ばれ、com.sun.star.util.ReplaceDescriptor サービスをサポートしています。 先に説明した SearchDescriptor 用の属性は、すべてこの ReplaceDescriptor でも利用できます。 たとえば置換処理の場合も、大文字と小文字の区別や、類似検索の有無を指定することができます。 以下のサンプルコードは、ReplaceDescriptors を使用した StarSuite ドキュメント上での置換処理を示します。 Dim I As Long
Dim Doc As Object
Dim Replace As Object
Dim BritishWords(5) As String
Dim USWords(5) As String
BritishWords() = Array("colour", "neighbour", "centre", "behaviour", _
"metre", "through")
USWords() = Array("color", "neighbor", "center", "behavior", _
"meter", "thru")
Doc = StarDesktop.CurrentComponent
Replace = Doc.createReplaceDescriptor
For O = 0 To 5
Replace.SearchString = BritishWords(I)
Replace.ReplaceString = USWords(I)
Doc.replaceAll(Replace)
Next n
検索文字列および置換文字列は、ReplaceDescriptors の SearchString および ReplaceString 属性を使って指定します。 実際の置換処理では、ドキュメントオブジェクトの replaceAll メソッドを使用することで、該当文字列を一括置換できます。 例: 正規表現による検索と置換StarSuite の置換機能は、正規表現と併用することで、より複雑な処理を行えるようになります。 正規表現とは、通常の固定された検索文字列の代わりに、プレースホルダや特殊記号から成る検索式を用いた、いわゆるパターンマッチングのことです。 StarSuite で使用可能な正規表現の詳細情報については、StarSuite のオンラインヘルプを参照してください。 ここでは、いくつかの例を紹介します。
以下のサンプルコードでは、^$ という正規表現を用いて、文書ドキュメント内の空白行を削除します。 Dim Doc As Object Dim Replace As Object Dim I As Long Doc = StarDesktop.CurrentComponent Replace = Doc.createReplaceDescriptor Replace.SearchRegularExpression = True Replace.SearchString = "^$" Replace.ReplaceString = "" Doc.replaceAll(Replace) 文書ドキュメント: テキスト以外のオブジェクト本章のここまでの説明は、テキストの段落および段落部位のみを扱ってきました。 しかし文書ドキュメントには、テキスト以外のオブジェクトも存在します。 これに該当するのは、テーブル、テキストフィールド、ディレクトリ、図形描画オブジェクトなどです。 このようなオブジェクトは、テキスト内の任意の位置に配置することができます。 このような基本機能を扱うため、これらの StarSuite オブジェクトは、com.sun.star.text.TextContent という基本サービスをサポートしています。 このサービスでは、以下の属性が利用できます。
TextContent のオブジェクト群は、オブジェクトの作成、挿入、削除に関するメソッドなどをいくつか共有しています。
これらのメソッドの使用法については、以下の節で各種の例を説明します。 テーブル以下のサンプルコードでは、先に説明した createInstance メソッドを利用してテーブル (表) を作成します。 Dim Doc As Object
Dim Table As Object
Dim Cursor As Object
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Table = Doc.createInstance("com.sun.star.text.TextTable")
Table.initialize(5, 4)
Doc.Text.insertTextContent(Cursor, Table, False)
テーブルの作成では、テーブルオブジェクトの作成後、initialize による行数および列数の初期化を行い、insertTextContent を用いて文書ドキュメントに挿入します。 上記のサンプルコードにあるように、insertTextContent メソッドには Content オブジェクト以外に 2 つのパラメータを渡す必要があります。
注 – 文書ドキュメントへのテーブルの作成と挿入は、VBA でも StarSuite Basic でもオブジェクトを利用して処理しますが、StarSuite Basic ではドキュメントオブジェクトと TextCursor オブジェクトを使用するのに対し、VBA では Range オブジェクトがこれに対応します。 また VBA でのテーブル作成と設置は Document.Tables.Add メソッドが処理しますが、StarSuite Basic では上記のサンプルコードのように、テーブルの作成は createInstance で行い、初期化後のテーブルを insertTextContent によりドキュメントに挿入します。 文書ドキュメントに挿入されたすべてのテーブルの取得は、簡単なループで処理できます。 このような処理では、文書ドキュメントの getTextTables() メソッドを使用します。 Dim Doc As Object Dim TextTables As Object Dim Table As Object Dim I As Integer Doc = StarDesktop.CurrentComponent TextTables = Doc.getTextTables() For I = 0 to TextTables.count - 1 Table = TextTables(I) ' Editing table Next I 注 – StarSuite 8 では、ドキュメントオブジェクトの TextTables リストを利用してテキストテーブルにアクセスできます。 これは、従来 Selection オブジェクトで取得していたテーブルリストに置き換わるものです。 先に見たサンプルコードでは、テキストテーブルの作成法について説明しました。 テキストテーブルへのアクセスについては、以下の節で説明しています。 テーブルの編集1 つのテーブルは、1 行または複数の行から構成されています。 そして各行は、いくつかのセルに分割されています。 厳密に表現すると、StarSuite のテーブルに列というものは存在しません。 ここでのテーブル列は、複数の行を上下方向に並べた結果として形成された、いわば見かけ上の存在です。 ただし StarSuite には、テーブルの操作性を高めるため、列を対象とした操作メソッドがいくつか用意されています。 これらのメソッドは、セルを結合していないテーブルを扱う場合に有用です。 ここではまず、テーブル本体の属性について説明します。 これらは、com.sun.star.text.TextTable サービスに定義されています。 以下に、重要度の高いテーブルオブジェクトの属性を示します。 テーブル行個々のテーブルについては、その構成行をリストの形で一括取得できます。 以下のサンプルコードでは、テーブル内の行を取得して書式を設定します。 Dim Doc As Object
Dim Table As Object
Dim Cursor As Object
Dim Rows As Object
Dim Row As Object
Dim I As Integer
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Table = Doc.createInstance("com.sun.star.text.TextTable")
Table.initialize(5, 4)
Doc.Text.insertTextContent(Cursor, Table, False)
Rows = Table.getRows
For I = 0 To Rows.getCount() - 1
Row = Rows.getByIndex(I)
Row.BackColor = &HFF00FF
Next
ここでは、Table.getRows を使用して、テーブル構成行のリストを取得しています。 このリストの内容にアクセスするには、com.sun.star.table.XtableRows インターフェースに属する getCount および getByIndex メソッドを使用します。 getByIndex メソッドを実行すると行オブジェクトが返されますが、これは com.sun.star.text.TextTableRow サービスをサポートしています。 以下に、com.sun.star.table.XtableRows インターフェースの主要なメソッドを示します。
getByIndex および getCount メソッドはすべてのテーブルで使用できますが、insertByIndex および removeByIndex が使用できるのは、セルを結合していないテーブルだけです。 com.sun.star.text.TextTableRow サービスでは、以下の属性が利用できます。 テーブル列列へのアクセスは、行の場合と同様に getByIndex、getCount、insertByIndex、removeByIndex メソッドを用いますが、この場合は Column オブジェクトを getColumns で取得してから使用します。 ただしこれらのメソッドが利用できるのは、セルを結合していないテーブルだけです。 また StarSuite Basic では、列単位でセルの書式を設定することはできません。 このような処理を行うには、テーブルのセルを個別に書式設定する必要があります。 テーブルセルStarSuite ドキュメントのテーブルのセルには、それぞれ固有の名前が存在します。 StarSuite ドキュメント上のテーブルのセルにカーソルを移動すると、ステータスバーに該当する名前が表示されます。 たとえば左上隅のセルは通常 A1 と表示され、n 行 X 列のテーブルであれば右下隅のセルは Xn となります。 セルオブジェクトにアクセスするには、テーブルオブジェクトの getCellByName() メソッドを使用します。 以下のサンプルコードでは、ループを使用してテーブル内のすべてルにアクセスし、個々のセルごとに該当する行と列の番号を表示します。 Dim Doc As Object
Dim Table As Object
Dim Cursor As Object
Dim Rows As Object
Dim RowIndex As Integer
Dim Cols As Object
Dim ColIndex As Integer
Dim CellName As String
Dim Cell As Object
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Table = Doc.createInstance("com.sun.star.text.TextTable")
Table.initialize(5, 4)
Doc.Text.insertTextContent(Cursor, Table, False)
Rows = Table.getRows
Cols = Table.getColumns
For RowIndex = 1 To Rows.getCount()
For ColIndex = 1 To Cols.getCount()
CellName = Chr(64 + ColIndex) & RowIndex
Cell = Table.getCellByName(CellName)
Cell.String = "row: " & CStr(RowIndex) + ", column: " & CStr(ColIndex)
Next
Next
テーブルのセルは、通常のテキストに相当します。 TextCursor オブジェクトの作成は、createTextCursor インターフェースを使用します。 CellCursor = Cell.createTextCursor() 個々の文字および段落に対して設定可能なすべてのオプションは、この場合も使用できます。 以下のサンプルコードでは、文書ドキュメント上のすべてのテーブルを調べて、数値の入ったセルのみを右揃えにしますが、セルの書式設定の際に段落属性を利用しています。 Dim Doc As Object
Dim TextTables As Object
Dim Table As Object
Dim CellNames
Dim Cell As Object
Dim CellCursor As Object
Dim I As Integer
Dim J As Integer
Doc = StarDesktop.CurrentComponent
TextTables = Doc.getTextTables()
For I = 0 to TextTables.count - 1
Table = TextTables(I)
CellNames = Table.getCellNames()
For J = 0 to UBound(CellNames)
Cell = Table.getCellByName(CellNames(J))
If IsNumeric(Cell.String) Then
CellCursor = Cell.createTextCursor()
CellCursor.paraAdjust = com.sun.star.style.ParagraphAdjust.RIGHT
End If
Next
Next
このサンプルコードでは、TextTables というオブジェクトを作成して、その中にすべてのテキストテーブルのリストを取得することで、全テーブルを対象としたループに入っています。 そして個々のテーブルごとにセル名のリストを取得します。 次にこのリストを基にして、第 2 のループを開始します。 このループでは、セル内のデータが数値であるかを判定し、その結果に応じて書式を設定します。 その際の処理としては、まずテーブルセルの内容の参照用に TextCursor オブジェクトを作成してから、テーブルセルの段落属性を使用して、必要な書式を設定しています。 テキスト枠テキスト枠も、テーブルやグラフと同様に TextContent オブジェクトとして扱われます。 テキスト枠は本質的に通常のテキストと同質のものですが、ページ上の任意の位置に配置できることと、ドキュメント本文のテキストの流れから外れた存在である点が異なります。 これまでに見てきた TextContent オブジェクトと同様に、テキスト枠の場合も、オブジェクトの作成とドキュメント上への挿入は、それぞれ個別の操作として実行します。 Dim Doc As Object
Dim TextTables As Object
Dim Cursor As Object
Dim Frame As Object
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Frame = Doc.createInstance("com.sun.star.text.TextFrame")
Doc.Text.insertTextContent(Cursor, Frame, False)
テキスト枠の作成には、ドキュメントオブジェクトの createInstance メソッドを使用します。 作成後のテキスト枠は、Text オブジェクトの insertTextContent メソッドを使用して、ドキュメントへ挿入します。 その際には、com.sun.star.text.TextFrame というサービス名を指定する必要があります。 テキスト枠の挿入位置は Cursor オブジェクトにより指定されるため、挿入時はこのオブジェクトも準備しておく必要があります。 注 – StarSuite のテキスト枠は、MS Word のテキストボックスに相当する機能です。 ただし VBA の処理では、Document.Frames.Add メソッドを使用しますが、StarSuite Basic では上述したように、ドキュメントオブジェクトの createInstance メソッドおよび TextCursor を使用して作成します。 テキスト枠オブジェクトには、テキスト枠の表示位置や挙動を制御するために、各種の属性が用意されています。 これら属性の大部分は com.sun.star.text.BaseFrameProperties サービスで定義されているもので、これは各 TextFrame サービスでもサポートされています。 以下に主要な属性を示します。
以下のサンプルコードでは、これらの属性を使用してテキスト枠を作成します。 Dim Doc As Object
Dim TextTables As Object
Dim Cursor As Object
Dim Frame As Object
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Cursor.gotoNextWord(False)
Frame = Doc.createInstance("com.sun.star.text.TextFrame")
Frame.Width = 3000
Frame.Height = 1000
Frame.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
Frame.TopMargin = 0
Frame.BottomMargin = 0
Frame.LeftMargin = 0
Frame.RightMargin = 0
Frame.BorderDistance = 0
Frame.HoriOrient = com.sun.star.text.HoriOrientation.NONE
Frame.VertOrient = com.sun.star.text.VertOrientation.LINE_TOP
Doc.Text.insertTextContent(Cursor, Frame, False)
このサンプルコードでは、テキスト枠の挿入位置を指定するために TextCursor を作成しています。 実際の挿入位置は、1 つ目と 2 つ目の単語の間です。 そして、Doc.createInstance を使用してテキスト枠を作成します。 その後、テキスト枠の各属性に必要な値を指定しています。 AnchorType (TextContent サービス) 属性と VertOrient (BaseFrameProperties サービス) 属性との関係には注意が必要です。 ここでは、AnchorType に AS_CHARACTER という値を指定しています。 これは、テキスト枠をテキストフロー中に直接挿入して、通常の文字として振る舞うよう指定するものです。 このような指定により、たとえばテキストフローが途中で改行される場合、このテキスト枠も次の行に送られるようになります。 一方の VertOrient 属性に指定した LINE_TOP という値は、テキスト枠とテキストの上端を同じ高さにするための設定です。 初期値の設定終了後、insertTextContent を使用してテキスト枠を文章ドキュメントに挿入します。 テキスト枠の内容を編集するには、TextCursor を使用する必要がありますが、その使用法はすでに説明したように、テキスト枠の場合も特に違いはありません。 Dim Doc As Object
Dim TextTables As Object
Dim Cursor As Object
Dim Frame As Object
Dim FrameCursor As Object
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Frame = Doc.createInstance("com.sun.star.text.TextFrame")
Frame.Width = 3000
Frame.Height = 1000
Doc.Text.insertTextContent(Cursor, Frame, False)
FrameCursor = Frame.createTextCursor()
FrameCursor.charWeight = com.sun.star.awt.FontWeight.BOLD
FrameCursor.paraAdjust = com.sun.star.style.ParagraphAdjust.CENTER
FrameCursor.String = "This is a small Test!"
上記のサンプルコードでは、テキスト枠を作成して現在のドキュメントに挿入し、このテキスト枠内部に TextCursor を移動しています。 次にこのカーソルを使用して、テキスト枠内の表示フォントの太字への設定および、段落配置の中央揃への設定を行なっています。 そして最後に「This is a small test!」という文字列を、テキスト枠内に表示させています。 テキストフィールドテキストフィールドは、通常のテキストの機能を拡張したものであるため、これらも TextContent オブジェクトとして扱われます。 テキストフィールドの文書ドキュメントへの挿入では、他の TextContent オブジェクトの場合と同様のメソッドを使用します。 Dim Doc As Object
Dim DateTimeField As Object
Dim Cursor As Object
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
DateTimeField = Doc.createInstance("com.sun.star.text.TextField.DateTime")
DateTimeField.IsFixed = False
DateTimeField.IsDate = True
Doc.Text.insertTextContent(Cursor, DateTimeField, False)
このサンプルコードでは、現在の日付を表示するテキストフィールドを、文書ドキュメントの先頭に挿入しています。 IsDate 属性への True の指定は、日付のみを表示し、時刻は表示しないことを意味します。 また IsFixed への False の指定は、ドキュメントを開く際に日付を自動更新することを意味します。 注 – VBA ではフィールドの種類を指定するのに Document.Fields.Add メソッドのパラメータを使用しますが、StarSuite Basic では、フィールドの種類を指定するサービス名がその役割を担っています。 StarSuite の従来バージョンでは、テキストフィールドを操作するのに、Selection オブジェクトで使用できた各種のメソッドを利用する必要がありました (たとえば InsertField、DeleteUserField、SetCurField)。 StarSuite 8 では、テキストフィールドの処理もオブジェクト指向の概念に基づくよう改められました。 つまりテキストフィールドを構築するに当たっては、最初に該当するタイプのテキストフィールドを作成してから、必要な属性値を指定して初期化する必要があります。 このような処理を経た後、insertTextContent を使ってテキストフィールドをドキュメントに挿入します。 このような処理の流れは、先に紹介したサンプルコードに示した通りです。 主要なフィールドの種類およびそれらの属性については、以下の節で説明しています。 テキストフィールド関係の操作では、ドキュメントへの挿入以外にも、ドキュメント上のフィールドを検索するという処理も行えます。 以下のサンプルコードでは、ループを使って文書ドキュメント上のすべてのテキストフィールドにアクセスし、フィールドの種類を確認します。 Dim Doc As Object
Dim TextFieldEnum As Object
Dim TextField As Object
Dim I As Integer
Doc = StarDesktop.CurrentComponent
TextFieldEnum = Doc.getTextFields.createEnumeration
While TextFieldEnum.hasMoreElements()
TextField = TextFieldEnum.nextElement()
If TextField.supportsService("com.sun.star.text.TextField.DateTime") Then
MsgBox "Date/time"
ElseIf TextField.supportsService("com.sun.star.text.TextField.Annotation") Then
MsgBox "Annotation"
Else
MsgBox "unknown"
End If
Wend
すべてのテキストフィールドにアクセスするには、ドキュメントオブジェクト上に存在するフィールドのリストを取得する必要があります。 このサンプルコードでは、Enumeration オブジェクトを作成することでこのようなリストを取得し、すべてのテキストフィールドにアクセスするループに入ります。 検出されたテキストフィールドに対しては、supportsService メソッドを用いて、そのサポートするサービスを確認します。 フィールドの種類が日付/時刻 (date/time) ないしコメント (annotation) の場合は、該当するフィールドの種類をメッセージボックスに表示します。 その他の種類のフィールドに対しては、「unknown」と表示します。 以下に、重要なテキストフィールドとその属性を示します。 すべてのテキストフィールドに関するリストについては、『API reference』の com.sun.star.text.TextField モジュールを参照してください (StarSuite Basic では、先に見たサンプルコードの表記と同様に、テキストフィールドのサービス名の大文字と小文字を区別する必要があります)。 ページ数、語数、文字数テキストフィールドについては、以下のサービスが利用できます。
それぞれページ数、語数、文字数を返します。 これらは以下の属性をサポートしています。 現在のページ現在のページ番号を表示するフィールドをドキュメントに挿入するには、テキストフィールドに com.sun.star.text.TextField.PageNumber を指定します。 この場合は、以下の属性が利用できます。
以下のサンプルコードでは、ページ番号表示用のフッタをドキュメントに挿入します。 Dim Doc As Object
Dim DateTimeField As Object
Dim PageStyles As Object
Dim StdPage As Object
Dim FooterCursor As Object
Dim PageNumber As Object
Doc = StarDesktop.CurrentComponent
PageNumber = Doc.createInstance("com.sun.star.text.TextField.PageNumber")
PageNumber.NumberingType = com.sun.star.style.NumberingType.ARABIC
PageStyles = Doc.StyleFamilies.getByName("PageStyles")
StdPage = PageStyles("Default")
StdPage.FooterIsOn = True
FooterCursor = StdPage.FooterTextLeft.Text.createTextCursor()
StdPage.FooterTextLeft.Text.insertTextContent(FooterCursor, PageNumber, False)
このサンプルコードでは、まず com.sun.star.text.TextField.PageNumber サービスをサポートするテキストフィールドを作成しています。 StarSuite ではヘッダおよびフッタ行をページテンプレートに定義しているため、 PageStyles のリストから選択することによりオブジェクトを作成しています。 FooterIsOn 属性に True を指定しているのは、フッタ行を表示させるための処理です。 テキストフィールドをドキュメントに挿入する際には、左揃え表示を指定したテキストオブジェクトを使用しています。 コメントコメント (注釈) フィールド (com.sun.star.text.TextField.Annotation) は、文章ドキュメント上で黄色のシンボルとして表示されます。 このシンボルをクリックすると、テキストフィールドが開き、挿入箇所の文章に関するコメントを入力できるようになります。 コメントフィールドでは、以下の属性が利用できます。 日付と時刻日付/時刻フィールド (com.sun.star.text.TextField.DateTime) は、現在の日付および時刻の表示に使用します。 この場合は、以下の属性が利用できます。
章名および章番号テキストフィールドに章名を表示するには、com.sun.star.text.TextField.Chapter を使用します。 表示形式は、以下の 2 つの属性で指定します。
テキストマークテキストマーク (com.sun.star.text.Bookmark) も TextContent オブジェクトとして扱われます。 このためテキストマークの作成と挿入も、すでに説明したものと同様の手順で行えます。 Dim Doc As Object
Dim Bookmark As Object
Dim Cursor As Object
Doc = StarDesktop.CurrentComponent
Cursor = Doc.Text.createTextCursor()
Bookmark = Doc.createInstance("com.sun.star.text.Bookmark")
Bookmark.Name = "My bookmarks"
Doc.Text.insertTextContent(Cursor, Bookmark, True)
このサンプルコードでは、テキストマークの挿入位置の指定用に Cursor というオブジェクトを作成してから、実際のテキストマークオブジェクト (Bookmark) を作成しています。 このテキストマークは、名前を付けてから、insertTextContent を用いてカーソル位置に挿入します。 テキストマークへのアクセスには、Bookmarks と呼ばれるリストを使用します。 また個々のテキストマークは、番号または名前により特定できます。 以下のサンプルコードでは、文書ドキュメント上で特定のテキストマークを選択して、該当位置へテキストを挿入します。 Dim Doc As Object
Dim Bookmark As Object
Dim Cursor As Object
Doc = StarDesktop.CurrentComponent
Bookmark = Doc.Bookmarks.getByName("My bookmarks")
Cursor = Doc.Text.createTextCursorByRange(Bookmark.Anchor)
Cursor.String = "Here is the bookmark"
ここでは getByName メソッドを用いて、テキストマークをその名前で特定しています。 そして createTextCursorByRange を用いて Cursor というオブジェクトを作成して、このテキストマークのアンカー位置を取得します。 最後にこのカーソルの示す位置に、文字列を挿入しています。 |