PythonでOutlookの予定を一覧取得したい
2022/6/18
タイトルの通りです。
背景
今の職場では毎朝その日の予定をメールで送るというルールがあります。毎回手動でやろうと思うと、例えば会議が5個入っていたら、その5個に対して開始時間、会議内容、終了時間を転記する必要があります。
それに加えて会議時間以外の予定(A資料作成、B会議準備、等)も記載して…となるとストレスしかありません。
だいたいこんなことやらせてるから非効率で業績も、、、、、なんて愚痴は置いておいて、ルールはルール、守る必要があります。
でも、できるだけ楽にしたい、そんな思いからPythonでコードを書いてみようと思いました。
今回の目標
今回はメール作成まではせず、汎用的に使えるように、Outlookから予定を取得してprint()
で出力するところまで実施します。
コード
早速コードです。モジュールは特にインストールせずにできました。必要そうなら適宜してください。
import win32com.client
import datetime
### Create Outlook Calendar Object
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
calender = outlook.GetDefaultFolder(9)
# Get schedules
items = calender.Items
output_items = []
# Define target period for schedules to collect
start_date = datetime.date(2022, 6, 1) # 2020-10-19
end_date = datetime.date(2022, 6, 15) # 2020-10-23
for item in items:
if start_date <= item.start.date() <= end_date:
output_items.append(item)
# Show results.
i = 1
for output_item in output_items:
print(f"No.{i}--------------------")
print("Subject: ", output_item.subject)
print("Location: ", output_item.location)
print("Start Time: ", output_item.start)
print("End Time: ", output_item.end)
print("Details: ", output_item.body)
i += 1
自動化効果
私は上記コードをもう少しいじって、タスクスケジューラでPC起動時にメールが作成・表示されるように設定しました。PCを起動したらメールの中身だけ確認して送信ボタンを押すだけなのでとても楽になりました。
今までかかってた時間
- 会議予定の転記:15秒x5個=75秒
- 予定の記載:15秒x3個=45秒
- その他の記載(TOやCC、件名等):60秒
- 合計/日:180秒=3分
- 合計/月(20営業日):60分=1時間
月に1時間ですよ?業務開始メールにかける時間が!自分で言うのもあれですが、タイピングは早いほうだと思っているので、他の人はもっと時間を使っていると思うんです。
ちなみに過去の私のプロジェクトでは1人5,000円/時くらいで要員調達していたので、月に5,000円x人数分のコストをかけて業務開始メールを書いてるのです。
まぁ私の今の場合は、お客さんにやらされているのでそのコストもお客さん持ちなので良いですが、逆の立場になった時にはちゃんと考えたいですね。