2024/09/27

DXL Step-by-Step:#39)セルの設定 - サンプルコード

DXL 活用の調査・検証で、実現できたことや発見したことご紹介する『DXL Step-by-Step』シリーズの第 39 回です。直近 2 回、『#37)セルの設定 - 背景色』と『#38)セルの設定 - 表の罫線』の設定を行うプログラムを作成します。


サンプルの内容

この時点で最新のサンプルコードである『#36)罫線の設定 - 境界線のスタイル』のプログラムをもとに作業します。

実現する機能は、#37 で行った背景のグラデーション設定と #38 の罫線の幅の設定です。


セルの取得

背景色や罫線の幅の設定はセルのノード tablecell の属性設定となります。そこで、表 table ノードからセルを取得する関数を作成します。引数は table ノードと取得する行と列となります。

Function xGetDXL_cell(vdenTbl As NotesDOMElementNode, ByVal viRow As Integer, ByVal viCol As Integer) As NotesDOMElementNode
   'セルのマージは考慮しない
   Dim denRow As NotesDOMElementNode

   '行を取得
   Set denRow = GetChildByName_Nth(vdenTbl, "tablerow", viRow)

   'セルを取得
   If Not(denRow Is Nothing) Then
      Set xGetDXL_cell = GetChildByName_Nth(denRow, "tablecell", viCol)
   End If
End Function

ライブラリ lsDXL 内に事前に作成した GetChildByName_Nth 関数を利用しています。この関数は、指定した名前の子ノードの中から n 番目のノードを返す関数でした。

まず、この関数で指定された行の tablerow ノードを取得しています。そして同様に tablerow ノード配下の tablecell ノードを取得して戻り値としています。

もし、引数の行や列が大きい場合などは Nothing を返します。


なお、この関数はセルのマージを考慮していません。あらかじめご了承ください。


背景色と罫線の幅の設定

上記関数を使用してセルが取得できたら、背景色と罫線の幅の設定を行います。DXL を作成する関数 xSetDXL を変更します。

今回作成した関数を使用して、真ん中のセルのノードを取得。背景色を設定したあと、四方の罫線の幅を 3 ピクセルに設定しています。

Function xSetDXL(vdprs As NotesDOMParser)
         ・・・
   Call xSetDXL_colwidth(denTbl, 3, "30%")

   '境界線のスタイル
   'Call denTbl.SetAttribute("cellborderstyle", "ridge")
   Call denTbl.SetAttribute("cellbordercolor", "green")

   'セルの取得
   Dim denCell As NotesDOMElementNode
   Set denCell = xGetDXL_cell(denTbl, 2, 2)


   '背景色の設定
   Call denCell.SetAttribute("bgcolor", "#e0e0ff")
   Call denCell.SetAttribute("altbgcolor", "#ffffd0")
   Call denCell.SetAttribute("colorstyle", "hgradient")


   '罫線の設定
   Call denCell.SetAttribute("borderwidth", "3px")

   '表後の段落追加
   Call xSetDXL_par(ddn, denRT)
End Function

ただ、これで完成ではありません。この状態で実行すると次のようになります。

#38 で紹介したように隣接するセルの幅も設定する必要があります。今回は、正しく表示されていない右と下のセルについて設定します。

         ・・・
   '罫線の設定
   Call denCell.SetAttribute("borderwidth", "3px")

   '右と下のセルの罫線の調整
   Set denCell = xGetDXL_cell(denTbl, 2, 3)
   Call denCell.SetAttribute("borderwidth", "1px 1px 1px 3px")
   Set denCell = xGetDXL_cell(denTbl, 3, 2)
   Call denCell.SetAttribute("borderwidth", "3px 1px 1px 1px")


   '表後の段落追加
   Call xSetDXL_par(ddn, denRT)
End Function

以上で完成です。


まとめ

今回はセルの操作についてサンプルコードを紹介しました。

罫線の設定においては、隣接するセルの設定を行うことがポイントとなります。今回のサンプルでは最低限必要な、右と下のセルだけ設定しましたが、理想を言えば上や左のセルも設定するほうが正しいと言えます。

設定位置が違うので当たり前なのですが、上下左右で幅を指定する文字列はそれぞれ違います。また、1 行目などセルの位置によっては隣接するセルがない場合があります。

これらすべてを考慮して確実に操作するコードを抜けもれなく確実に記述するのは大変です。その上、コードがだらだら長くなりますので見づらくなります。

実運用のコーディングでは関数化するなど工夫が必要ですね。


前回 DXL Step-by-Step 次回


0 件のコメント:

コメントを投稿