FAQ for OpenOffice.org Basic with Writer
現在のカーソル位置にテキストを挿入する
現在の位置範囲を取得することが必要です。そのために使用することができるのが,ビューカーソル (ViewCursor) です。 ビューカーソルオブジェクトを取得することで,現在のカーソル位置範囲となります。ビューカーソルオブジェクトは getViewCursor メソッドを使用して取得します。 Sub currentcursorposition Dim oDoc As Object, oController As Object Dim oViewCursor As Object oDoc = ThisComponent oController = oDoc.getCurrentController() oViewCursor = oController.getViewCursor() oViewCursor.setString("Now!") End Sub このようにすると,普通のテキストなら挿入することができます。また,カーソル範囲が選択状態のときは置換されます。 現在のカーソル位置にテキストコンテンツを挿入する
フレームやフィールドのようなテキストコンテンツを挿入するときには insertTextContent メソッドを使用します。しかし,このメソッドは引数に範囲オブジェクトをとるため,この範囲オブジェクトが現在のカーソル位置でなければ現在のカーソル位置へ挿入することができません。 そこで,利用するのがビューカーソルです。このビューカーソルは範囲オブジェクトでもあるのです。そこで,次のようにするとフレームオブジェクトを現在のカーソル位置へ挿入することができます。 Sub insertcurrentcursorposition Dim oDoc As Object, oController As Object Dim oViewCursor As Object Dim oFrame As Object, oText As Object oDoc = ThisComponent oFrame = oDoc.createInstance("com.sun.star.text.TextFrame") oController = oDoc.getCurrentController() oText = oDoc.getText() oViewCursor = oController.getViewCursor() oText.insertTextContent(oViewCursor,oFrame,false) End Sub ブックマーク位置にドキュメントを挿入する
ブックマーク位置にドキュメントを挿入します。 Sub insertDocumentAtBookmarkPosition oDoc = ThisComponent oText = oDoc.getText() oBookmarks = oDoc.Bookmarks oBookmark = oBookmarks.getByName("doc2") oTextRange = oBookmark.Anchor oCursor = oText.createTextCursorByRange(oTextRange) oCursor.insertDocumentFromURL("file:///C:/usr/2.odt",Array()) End Sub ドキュメントの挿入 insertDocument も参照。 二つのテキスト範囲の間のテキスト範囲を利用
二つのテキスト範囲の間にあるテキストフィールド (ブックマークやテキストフィールドなどの間) を利用します。 二つのブックマーク doc1 および doc3 があり、doc1 が doc3 より前にあるときです。どちらが前にあるかどうかはテキスト範囲の比較を利用して調べます。 まず、二つのブックマークからそれぞれのアンカーのテキスト範囲を取得します。そして、テキストカーソルを一つ目の位置に移動、つづいて選択しながら二つ目の位置に移動します。二つ目の位置に移動終了時には二つ目のブックマークが選択されているので一つ前に戻って選択を解除します。このとき二つのテキスト範囲の位置関係によって左もしくは右に移動させます。 Sub textrangebetween oDoc = ThisComponent oText = oDoc.getText() oBookmarks = oDoc.Bookmarks oBookmarkA = oBookmarks.getByName("doc1") oTextRangeA = oBookmarkA.Anchor oBookmarkB = oBookmarks.getByName("doc3") oTextRangeB = oBookmarkB.Anchor oCursor = oText.createTextCursor() oCursor.gotoRange(oTextRangeA,False) oCursor.gotoRange(oTextRangeB,True) oCursor.goLeft(1,True) msgbox oCursor.String() End Sub テキストカーソルから二つのテキスト範囲の間のテキスト範囲にアクセスできます。 文字を画像で置換する
検索、見つかった文字を画像に置き換えます。
どこかにカーソルを移動する
フィールドやブックマーク、テキストコンテンツの位置にテキストカーソルやビューカーソルを移動したい時があります。css.text.XTextCursor インターフェースの gotoRange メソッドで指定したテキスト範囲に移動できます。テキスト範囲とは、css.text.XTextRange インターフェースをサポートしているオブジェクトのことです。 フィールドなどのテキストコンテンツは自身が配置される位置付近にアンカーを持っており、css.text.XTextContent インターフェースの getAnchor メソッドでアンカー位置のテキスト範囲オブジェクトを取得できます。 次の例ではブックマークの位置にテキストカーソルを移動します。gotoRange メソッドの二番目の引数はカーソル移動中に選択するかどうかを指定します。 Sub MoveCursor oDoc = ThisComponent oText = oDoc.getText() oCursor = oText.createTextCursor() oBookmarks = oDoc.getBookmarks() oMark = oBookmarks.getByIndex(0) oCursor.gotoRange(oMark.getAnchor(), False) End Sub このアンカーですが、表オブジェクトはアンカーを返しません (利用しようとするとクラッシュします)。 |