1
@NomuSunder

フォルダ内のExcelファイルを一括で取り込むLotusScript

ExcelのデータをNotesに取り込むLotus Scriptは以下に紹介されていますが、Excelで作成された勤務表のようにセルが固定されているものであれば、ファイルを逐一で指定して取り込むのではなく、ファイルが集められたディレクトリを指定して一括で取り込んだほうが便利です。
VBAで使用されているDir関数はNotesでも利用できるので、これを使ってサンプルコードを書いてみます。

参考:ノーツ(LotusScipt)で、Excelブックを開いて操作する

概要

エージェントの実行をすると、ファイルが格納されているフォルダのファイルパスの入力を要求する画面が表示されます。ファイルパスを入力すると指定したフォルダ内の全Excelファイルを対象にして、Notesへの取り込みを行います。

  • サンプルでは、C:\Tempフォルダに山田一郎/山田次郎/山田三郎の勤務表(Excelファイル)があるという前提です。
  • Notes側では、氏名/日付/開始時間/終了時間のフィールドを持つ取込用フォームを用意します。日付分の文書を作成し、勤務者の氏名でカテゴリ化して表示する方法を採用しています。

サンプルコード

Sub Initialize

    On Error GoTo ErrorProc

    Dim ss As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim i As Integer

    Set db = ss.Currentdatabase

    '--ファイルが格納されているフォルダを指定させる
    Dim FilePath As String
    Dim FileWC As String
    Dim FileName As String

    FilePath = InputBox("ディレクトリのパスを入力してください","一括取込")
    If IsEmpty(FilePath) Then
        Exit Sub        
    End If

    '--Excelの起動   
    Dim ExcelObject As Variant
    Dim ExcelBook As Variant
    Dim ExcelSheet As Variant

    '--ディレクトリ内の全てのExcelファイルを取得する。
    'Dir関数の引数を省略して実行すると、前回に指定されたワイルドカードが指定されたものとしてファイルを取得する
    'すでに取得されたファイルは除外され、すべてのファイルの取得が終わったときにブランク(””)を返す。
    FileWC = FilePath & "\" & "*.xls"
    FileName = Dir$(FileWC, 0)
    Do While FileName <> ""
        '--Excelの取り込み処理
        Set ExcelObject = CreateObject("Excel.Application")
        ExcelObject.Visible = False
        ExcelObject.DisplayAlerts = False
        Set ExcelBook = ExcelObject.Workbooks.Open(FilePath & "\" & FileName)
        Set ExcelSheet = ExcelBook.Worksheets(1)

        '1日から31日まで
        For i = 1 To 31
            Set doc = db.createdocument
            With doc
                .form = "main"
                .Uname = ExcelSheet.Cells(5, 1).Value
                .UDate = ExcelSheet.Cells(7 + i, 1).Value       
                .UTimeS = ExcelSheet.Cells(7 + i, 4).Text    
                .UTimeE = ExcelSheet.Cells(7 + i, 5).Text   
            End With
            Call doc.Save(True, True)
        Next
        ExcelObject.Quit
        Set ExcelObject = Nothing
        FileName = Dir$()
    Loop

    MsgBox "取り込み処理が終わりました",, "正常終了"
    Exit Sub

ErrorProc:  
    MsgBox "取り込み処理に失敗しました",, "異常終了"
    ExcelObject.Quit
    Set ExcelObject = Nothing

End Sub

実行結果

全ての勤務者を取り込んで、勤務者をカテゴリにして、全ての日程を表示させています。

取り込み結果.png

補足説明

Excelファイルを順次で取り込んでいるときにエラーが発生すると、非表示で動作しているExcelファイルがメモリ上に残ってしまうため、On Error Goto で、ExcelのClose処理を行う場所にジャンプするようにしています。

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
NomuSunder

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン