LoginSignup
79
112

More than 3 years have passed since last update.

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

Posted at

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

79
112
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
79
112