2025/11/02

Notes - Excel 連携:#58)ビューをそのまま Excel へ ③ - ビューデータの出力

今回からビューの中身(データ)を出力する部分を作成します。 

利用するのは NotesViewNavigator クラスです。このクラスの特徴はビューに表示された文書だけでなく、カテゴリ列やカテゴリ列に表示されている合計値、最終行に表示される総合計にもアクセスできます。


ビューのエントリを出力

NotesViewNavigator クラスでは、GetFirst メソッドで最初の行、GetNext メソッドで次の行を取得できます。NotesView クラスの GetFirstDocument メソッドなどと同じですね。

戻り値は NotesViewEntry オブジェクトで、ColumnValues プロパティから列の値を取得できます。ColumnValues は列の数だけの配列となっており、最初の要素が 1 列目の値となります(要素番号は 0 から)。

これらの機能を利用して、まずはビューのエントリを順に取得して Excel シートに出力してみます。xPrintAllData 関数は、ビューの全データを順に取得して、出力関数に渡しています。

%REM
ビューの全データを Excel シートに出力

◆ 引数
voSheet       Variant          Excel シート
vnvExport      NotesView    出力するビュー
vvCtgColNo   Variant          カテゴリ列番号のリスト(ない場合最初の要素が0)
vvCtgColor     Variant         カテゴリ列の文字色のリスト(要素数はrvCtgColNoと同じ)

◆ データ型(戻り値)  Integer
次の出力行番号(最終出力行 + 1)
%END REM

Function xPrintAllData(voSheet As Variant, vnvExport As NotesView, vvCtgColNo As Variant, vvCtgColor As Variant) As Integer
   Dim nvnav As NotesViewNavigator
   Dim nve As NotesViewEntry

   'カテゴリを含むビューの情報を取得
   Set nvnav = vnvExport.CreateViewNav()

   Dim iRow As Integer
   Dim vLine As Variant

   'ビューの出力開始
   iRow = 2      'シートの 2 行目から出力

   'ビューの 1 行目を取得
   Set nve = nvnav.GetFirst()

   'ビューのデータがなくなるまでループ
   Do Until (nve Is Nothing)
      '現在のビュー行の全カラム値を取得
      vLine = nve.ColumnValues

      '明細行として出力
      iRow = xPrintLine(voSheet, iRow, vLine)

      'ビューの次の行を取得
      Set nve = nvnav.GetNext(nve)
   Loop

   xPrintAllData = iRow
End Function

1 行分のデータを Excel シートに出力する関数 xPrintLine は次の通りです。

%REM
1 行分の全カラムデータを Excel シートに出力

◆ 引数
voSheet Variant    Excel シート
viRow         Integer    出力行(シートの行番号)
vvLine        Variant    出力データ(配列)

◆ データ型(戻り値)  Integer
次の出力行番号
%END REM

Function xPrintLine(voSheet As Variant, ByVal viRow As Integer, vvLine As Variant) As Integer
   Dim i As Integer

   '全カラムデータを 1 列目から順に出力
   For i = 0 To UBound(vvLine)
      voSheet.Cells(viRow, i + 1).Value = vvLine(i)
   Next

   '戻り値
   xPrintLine = viRow + 1
End Function


実行結果

ここまでのプログラムを実行すると次のようになります。ビューの各行、各列の値がそのまま表示されていることがわかります。

前回作成した関数 xSetHeader で列の色をセットしているので、ビューと同じ色でデータが出力されていますね。


次回の予定

今回はビュー並び順のまま素直にデータを出力してみました。このままだとカテゴリの行が見づらいですね。ということで、次回はカテゴリ行の調整を行います。


前回 Notes - Excel 連携


0 件のコメント:

コメントを投稿