Outlookの規定の予定表にある各予定表の予定一覧を出力する。
特化しすぎてタイトルが長い!
概要
Outlookの予定表を複数用意して、定時タスクを登録している。 複数の予定表から特定の日付のタスクを全部リストアップしたい。
ソースコード
以下のソースで適当にvbs作って呼ぶだけ。
必要に応じてテキストにリダイレクトでもすればいい。
cscript //nologo [VBSファイル名] [取得したい日付] [取得したい予定表の名前(N個)]
' 引数チェック! if WScript.Arguments.Count < 2 Then WScript.Echo "引数が少なすぎます。 [日付] [予定表名(任意の数)]" WScript.Quit End if Set args = WScript.Arguments Set objOutlook = CreateObject("Outlook.Application") Set objNamespace = objOutlook.GetNamespace("MAPI") Set defFolder = objNamespace.GetDefaultFolder(9) ' 指定の日付(第一引数) dt = CDate(args(0)) ' それ以降の対象の予定表名をループ For i = 1 to args.Count - 1 calName = CStr(args(i)) Set calFolder = defFolder.Folders(calName) Call EchoEvents(calFolder, dt) Next ' 指定のカレンダーの指定の日付のイベントを出力 Sub EchoEvents(calFolder, dt) Set colItems = calFolder.Items calName = calFolder.Name ' 普通のイベント For Each objItem In colItems If GetDateOnly(objItem.Start) = GetDateOnly(dt) Then ' CSV形式で [予定表名],[予定名],[開始時刻] で出力 WScript.Echo calName & "," & objItem.Subject & "," & Hour(objItem.Start) & ":" & Minute(objItem.Start) End If Next ' 定期イベント Set colFilteredItems = colItems.Restrict("[IsRecurring] = TRUE") For Each objItem In colFilteredItems ' DayOfWeekMaskの各曜日の値はWeekDayで取得できる数値から1引いて2乗した値になる。 maskValue = 2^(Weekday(dt) - 1) Set objPattern = objItem.GetRecurrencePattern ' ANDで一致すればOK If objPattern.DayOfWeekMask AND maskValue = maskValue Then ' CSV形式で [予定表名],[予定名],[開始時刻] で出力 WScript.Echo calName & "," & objItem.Subject & "," & Right("00" & Hour(objItem.Start), 2) & ":" & Right("00" & Minute(objItem.Start), 2) End If Next End Sub ' 日付のみ取得。DateTimeをシンプルなDateに変える。 Function GetDateOnly(dt) GetDateOnly = CDate(Year(dt) & "/" & Month(dt) & "/" & Day(dt)) End Function