この記事でやっているような全部吸い上げてからpythonでフィルタリングする方法よりも、下のコードで示すようなItems.Restrict()を使用する方が高速らしい
import win32com.client
import datetime
# 調べたい日付範囲を定義
start_date = datetime.date(2022, 4, 1)
end_date = datetime.date(2022, 4, 30)
# Outlookの予定表へのインタフェースオブジェクトを取得
Outlook = win32com.client.Dispatch("Outlook.Application").GetNameSpace("MAPI")
CalendarItems = Outlook.GetDefaultFolder(9).Items
# 定期的な予定の二番目以降の予定を検索に含める
CalendarItems.IncludeRecurrences = True
# 開始時間でソート
CalendarItems.Sort("[Start]")
# "mm/dd/yyyy HH:MM AM"の形式に変換し、フィルター文字列を作成
strStart = start_date.strftime('%m/%d/%Y %H:%M %p')
strEnd = end_date.strftime('%m/%d/%Y %H:%M %p')
sFilter = f"[Start] >= '{strStart}' And [End] <= '{strEnd}'"
# フィルターを適用し表示
FilteredItems = CalendarItems.Restrict(sFilter)
for item in FilteredItems:
print(str(item.Start.Format("%Y/%m/%d %H:%M")) + " : " + str(item.Subject))