2023/03/31

Notes - Excel 連携:#5)列とフォーマット設定

前回、ノーツ文書の値を Excel のワークシートに出力するサンプルをご紹介しました(#4)。

ただ、出力された Excel シートは、小数点の位置がバラバラになったり、いまひとつ美しくないですよね。これは、出力したワークシートの各セルの書式設定が、”標準”となっているからです。

今回は出力される Excel シートの体裁を改善することを目的に、列ごとにフォーマットを指定する方法を整理します。


フォーマットの設定

セルのフォーマット(書式設定)を指定するには、Range オブジェクトのプロパティである NumberFormat プロパティか NumberFormatLocal プロパティを使用します。

指定できる同じ書式はどちらのプロパティもほぼ同じです。書式を表す文字列は、Excel のセルの書式画面で、ユーザー定義を選択し、『種類(I):』に指定できる文字列となります。

ただし、"G/標準" や "[赤]"、 "\" 記号など日本語(ローカル)環境に依存する指定には、NumberFormatLocal プロパティを使用します。


列のアクセス

今回の要件では、列全体に対して同じ書式を設定することになります。そのためには、列全体を表す Range オブジェクトの取得が必要です。

以前紹介した Worksheet オブジェクトの Range プロパティを使用して、以下のように記述できます。

oSheet.Range("A:A")

また、列にアクセスするための専用のプロパティである Columns を使用して、記述することも可能です。Columns プロパティの場合、列番号(数値)で指定できます。

oSheet.Columns(1)

どちらの記述でも、ワークシート上の1列目(A列)を表す Range オブジェクトが取得できます。


サンプルプログラム

前回のコードにフォーマット設定を追加しました(赤字部分)。

1列目の日付時刻データは 年月日と時分、2列目の数値データは3桁ごとのカンマ区切りと小数点以下を1桁で固定、3列目は文字列としています。

Sub Initialize
   Dim ns As New NotesSession
   Dim ndb As NotesDatabase
   Dim ndc As NotesDocumentCollection
   Dim nd As NotesDocument
  
   Dim oXls As Variant
   Dim oSheet As Variant
  
   Dim i as Integer
  
   '選択文書取得
   Set ndb = ns.CurrentDatabase
   Set ndc = ndb.UnprocessedDocuments
  
   'Excel の準備
   Set oXls = CreateObject("Excel.Application")
   Call oXls.Workbooks.Add
   Set oSheet = oXls.Workbooks(1).WorkSheets(1)
  
   '列フォーマットを設定
   oSheet.Columns(1).NumberFormatLocal = "yyyy/m/d hh:mm"
   oSheet.Columns(2).NumberFormatLocal = "#,##0.0_ "
   oSheet.Columns(3).NumberFormatLocal = "@"

  
   '文書を Excel に出力
   For i = 1 to ndc.Count
      Set nd = ndc.GetNthDocument(i)
      oSheet.Cells(i, 1).Value = nd.Fld_DT(0)
      oSheet.Cells(i, 2).Value = nd.Fld_Num(0)
      oSheet.Cells(i, 3).Value = nd.Fld_Text(0)
   Next
  
   oXls.Visible = True
End Sub


まとめ

今回は、セルのフォーマット(書式設定)を指定するプロパティと列全体のアクセス方法について記載しました。

オブジェクトの関連図に追加すると以下のようになります。

前回 Notes - Excel 連携 次回

0 件のコメント:

コメントを投稿