2023/10/11

リッチテキスト:#12)セルのアクセス

NotesRichTextNavigator クラスを使用して、リッチテキスト内を走査してオブジェクトを探すことができると前回紹介しました。今回は、NotesRichTextNavigator クラスの使い方を掘り下げながら、表の中身であるセルに対するアクセス方法とセルに文字を入力する方法についてまとめます。


エレメントの探し方

NotesRichTextNavigator クラスには、エレメントを探すメソッドは次の 4 種類があります。

FindFirstElement 最初のエレメント
FindLastElement 最後のエレメント
FindNextElement 現在位置の次の要素
FindNthElement 2つ目の引数で指定した n 番目の要素

引数には探すエレメントのタイプを指定します。例えば、次のタイプです(抜粋)。

5 RTELEM_TYPE_DOCLINK 文書リンク
8 RTELEM_TYPE_FILEATTACHMENT 添付ファイル
1 RTELEM_TYPE_TABLE
7 RTELEM_TYPE_TABLECELL 表のセル

これらメソッドを利用する際のポイントは FindNextElement にある通り、NotesRichTextNavigator は現在の位置を持つことです。エレメントが見つかると、そのエレメントを現在位置に設定します。続いて、FindNextElement を実行するとその位置から検索を開始することになります。


サンプルプログラム

5 行 x 3 列の表を新規で作成し、各セルに n 行 m 列目 と文字を表示するコードを作成してみました。前回のコードと重複するする部分はグレーで表示しています。

'表の操作
Dim nrtnav As NotesRichTextNavigator
Dim nrttbl As NotesRichTextTable

Set nrtnav = nrti.CreateNavigator()
If nrtnav.FindFirstElement(RTELEM_TYPE_TABLE) Then
   Set nrttbl = nrtnav.GetElement()

   For iRow = 1 To nrttbl.RowCount
      For iCol = 1 To nrttbl.ColumnCount
         Call nrtnav.FindNextElement(RTELEM_TYPE_TABLECELL)

         Call nrti.BeginInsert(nrtnav, True)
         Call nrti.AppendText(CStr(iRow) & "行" & CStr(iCol) & "列")
         Call nrti.EndInsert()
      Next
   Next
End If

実行すると次のような結果となります。


セルのアクセス

まず、セルのアクセス方法です。

行数と列数で2重のループを行っていますが、ループ内の最初の処理で以下を実行しています。

   Call nrtnav.FindNextElement(RTELEM_TYPE_TABLECELL)

この行で表内の最初のセルを現在位置に設定してます。直前で FindFirstElement(RTELEM_TYPE_TABLE) を実行していますので、その表の最初のセルということになります。複数の表が存在する場合では、事前に目的の表を見つけておく必要があります。

次のループでは、その右隣のセルとなります。右端のセルまで進むと、次の行の左端のセルとなります。

このように表内のセルは、行と列で指定してアクセスするのではなく、左上から順にアクセスする仕様となっています。


文字の入力

NotesRichTextNavigator を使用するとリッチテキスト内の好きな位置に文字を追加することができます。ループ内のコードは次のようになっていました。

         Call nrti.BeginInsert(nrtnav, True)
         Call nrti.AppendText(CStr(iRow) & "行" & CStr(iCol) & "列")
         Call nrti.EndInsert()

NotesRichTextItem クラスの BeginInsert メソッドは、1つ目の引数である NotesRichTextNavigator の現在位置を挿入位置に設定します。2つ目の引数を True に設定すると現在位置の後ろ、False だと直前となります。

挿入位置が決まると AppendText で文字を挿入しています。サンプルコードでは文字を入力しているだけですが他の Append???? メソッドも使用できます。例えば、AppendTable を使用すれば、カスケードした表を作成することもできます。

なお、挿入作業が完了したら EndInsert を実行してください。BeginInsert と対になって実行する必要があります。

前回 リッチテキストの基本操作 次回

0 件のコメント:

コメントを投稿