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 件のコメント:
コメントを投稿