【自動化】PythonでOutlookの予定を抜き出す


Outlookで予定と実績を管理しているけれど…

私の会社はメール文化なので、Outlookでメールをやり取りし、仕事や会議の予定もOutlookで管理しています。
また、日報や週報での実績報告のために、いつ何をどこまでやったかもOutlookの予定に記録しています。

結果として、Outlookの予定表は予定と実績記録だらけで、目視で管理するのが面倒な状態になります。

週報にその日の業務実績を書く場合も、Outlookの予定表を書き写さないといけません。
私の業務はかなりマルチタスクで1日の予定の数がすごいことになっているので、手作業で確認して書き写すのがとても面倒です。

Pythonを使うとOutlookから予定表をまとめて抜き出すことができるので、あとはテキストファイルなりExcelなりに整形して、日報などにそのまま貼り付けることができます。

本記事ではMicrosoft Outlookのクライアントソフトから、Pythonで予定を抜き出す方法をご紹介します。

PythonでOutlookの予定表を抜き出す

outlookを操作するためにはwin32com.clientをimportする必要があります。
私はAnacondaを使っていますが、特に追加でインストールしなくてもimportできました。

python
import win32com.client

次にOutlookのオブジェクトを作成し、予定表と取り出します。

python
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
calender = outlook.GetDefaultFolder(9) # 「9」というのがOutlookの予定表のこと

このcalenderというのが予定表です。
では早速、期間を指定して予定を抜き出してみましょう。
ここでは【2020-10-19~2020-10-23】の予定を抜き出してみます。
※例として、この期間には2つだけ予定を登録しています。

python
import datetime

items = calender.Items # このitemsが一つ一つの「予定」

select_items = [] # 指定した期間内の予定を入れるリスト

# 予定を抜き出したい期間を指定
start_date = datetime.date(2020, 10, 19) # 2020-10-19
end_date = datetime.date(2020, 10, 23) # 2020-10-23

for item in items:
    if start_date <= item.start.date() <= end_date:
        select_items.append(item)

# 抜き出した予定の詳細を表示
for select_item in select_items:
    print("件名:", select_item.subject)
    print("場所:", select_item.location)
    print("開始時刻:", select_item.start)
    print("終了時刻:", select_item.end)
    print("本文:", select_item.body)
    print("----")
実行結果
件名: 不具合調査
場所: 実験室1
開始時刻: 2020-10-20 10:00:00+00:00
終了時刻: 2020-10-20 11:30:00+00:00
本文: ハングする不具合の調査をAさんと行う。
----
件名: コードレビュー
場所: 会議室3
開始時刻: 2020-10-22 14:00:00+00:00
終了時刻: 2020-10-22 15:00:00+00:00
本文: Bさん、Cさんとと案件1234のコードレビューを行う。
----
​

予定を抜き出せていますね!
日報などの形式に合わせてprint文を工夫すれば、出力結果をそのままコピペできるはずです。

コードまとめ

最後にコードをまとめて載せておきます。

python
import win32com.client
import datetime

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

calender = outlook.GetDefaultFolder(9)

items = calender.Items # このitemsが一つ一つの「予定」

select_items = [] # 指定した期間内の予定を入れるリスト

# 予定を抜き出したい期間を指定
start_date = datetime.date(2020, 10, 19) # 2020-10-19
end_date = datetime.date(2020, 10, 23) # 2020-10-23

for item in items:
    if start_date <= item.start.date() <= end_date:
        select_items.append(item)

# 抜き出した予定の詳細を表示
for select_item in select_items:
    print("件名:", select_item.subject)
    print("場所:", select_item.location)
    print("開始時刻:", select_item.start)
    print("終了時刻:", select_item.end)
    print("本文:", select_item.body)
    print("----")

Microsoft Office関連の自動化

Microsoft Officeに関連する他の自動化シリーズはこちらです。ご興味があればどうぞ!

【自動化】PythonでOutlookメールを送信する
https://qiita.com/konitech913/items/51867dbe24a2a4272bb6

【自動化】PythonでOutlookのメールを読み込む
https://qiita.com/konitech913/items/8a285522b0c118d5f905

【自動化】Pythonでメール(msgファイル)を読み込む
https://qiita.com/konitech913/items/fa0cf66aad27d16258c0

【自動化】PythonでWordの文書を読み取る
https://qiita.com/konitech913/items/c30236bdf47775535e2f