Pythonを使うとOutlook(アウトルック)のデータを読み込んで、結果を出力したりできます。
そこで、Pythonを使ってOutlookのデータを読み込み、そのデータをエクセルに出力するプログラムを紹介します。
●この記事で分かること
・PythonでOutlookのデータを読み込み、エクセルに一覧にする
・Outlookメール受信日が指定した日付の範囲内のときに限り、処理を行う
・Outlookメールに添付されたファイルを所定フォルダに自動保管する
それでは以下で詳しく紹介していきます。
- OutlookのデータをPythonで処理するプログラムの概要
- Pythonプログラム|Outlookメール情報をエクセルに一覧し添付ファイルを自動保管(win32com)するコード
- Pythonプログラムを使うときの注意点
OutlookのデータをPythonで処理するプログラムの概要
この記事では、Pythonを使ってOutlookメールの情報をエクセルに出力するプログラムを解説します。
目指すことは以下です。
●この記事で紹介するOutlook制御のPythonプログラム
Outlook制御1|Outlookのデータを読み込み、メール内容をエクセルに一覧にする
Outlook制御2|指定した日付の範囲内のメールのみを対象にする
Outlook制御3|指定した日付の範囲内のメールに添付ファイルがある場合、その添付ファイルを所定フォルダに自動保管する
この記事で紹介するプログラムを実行すると、以下のようなプログラムを得ることができます。
Outlook制御1|Outlookのデータを読み込み、メール内容をエクセルに一覧にする
●取得するOutlookのデータ
A列|取得したメールNo
B列|メール件名
C列|メールの受信日時
D列|メール送信元(送信者)
E列|メールの本文(最初の100文字)
F列|添付資料の有無
Outlook制御2|指定した日付の範囲内のメールのみを対象にする
ここでは、2019/4/1~2019/4/30までに受信したメールを一覧にするプログラムを想定している。
Outlook制御3|指定した日付の範囲内のメールに添付ファイルがある場合、その添付ファイルを所定フォルダに自動保管する
●添付ファイルの保管に関する補足
補足1|フォルダ名は「メール受信日」
補足2|一つのメールに複数の添付ファイルがある場合、全て取得する
Pythonプログラム|Outlookメール情報をエクセルに一覧し添付ファイルを自動保管(win32com)するコード
#ステップ1|ライブラリ from openpyxl import load_workbook import win32com.client import datetime import os #ステップ2|所定フォルダ内の「Book1.xlsm」を指定して読み込む filepath = 'C:/Users/---/Outlook_Book1.xlsx' wb = load_workbook(filename=filepath) ws1 = wb['データ'] #ステップ3|集計範囲の取得 startdate=ws1['B2'].value enddate=ws1['B3'].value #ステップ4|Outlookの情報を取得 outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") inbox = outlook.GetDefaultFolder(6) messages=inbox.Items #ステップ5|Outlookのt添付ファイル保管用フォルダの作成 now=datetime.datetime.now() foldermake=now.strftime("%Y/%m/%d %H:%M:%S") foldermake = foldermake.replace("/","-") foldermake = foldermake.replace(":","-") foldermake = foldermake.replace(" ","-") newfolder_path = 'C:/Users/---/Outlook_'+foldermake os.makedirs(newfolder_path) #ステップ6|Outlookの情報を取得 a=0 for message in messages: RT=message.ReceivedTime hiduketime = datetime.datetime(RT.year ,RT.month, RT.day, RT.hour, RT.minute, RT.second) if startdate <= hiduketime <= enddate: ws1.cell(row=7+a, column=1).value = a+1 ws1.cell(row=7+a, column=2).value = str(message.Subject) ws1.cell(row=7+a, column=3).value = hiduketime ws1.cell(row=7+a, column=4).value = str(message.Sender) ws1.cell(row=7+a, column=5).value = str(message.body[0:100]) if message.Attachments.Count > 0: myDate = RT.strftime("%Y/%m/%d %H:%M:%S") myDate = myDate.replace("/","-") myDate = myDate.replace(":","-") myDate = myDate.replace(" ","-") datefolder_path = newfolder_path + '\\' + myDate os.makedirs(datefolder_path) for myAttachment in message.Attachments: print(myAttachment.FileName) myAttachment.SaveAsFile(datefolder_path + '\\' + myAttachment.FileName) ws1.cell(row=7+a, column=6).value = '有' else: ws1.cell(row=7+a, column=6).value = '無' a=a+1 #ステップ7|「Outlook_Book2.xlsx」として所定のフォルダに保存する newfilepath = 'C:/Users/---/Outlook_Book2.xlsx' wb.save(newfilepath) print('保存しました')
Pythonプログラムを使うときの注意点
この記事で紹介しているプログラムを使うときの注意点を以下に記載しておきます。
注意点1|エクセルを準備しておくこと
このプログラムでは、エクセルを自動生成するように設定していません。
そのため、以下のエクセルをあらかじめ準備しておく必要があります。
●あらかじめ準備しておくこと
準備1|ファイル名を「Outlook_Book1.xlsx」としておく
準備2|シート名を「データ」としておく
なお、上記のプログラムでは、エクセルの7行目以降に情報は書き込まれていきます。
そのため、以下のrow=7+aの7を書きかえることで、書き込む行を変更することができます。
36. ws1.cell(row=7+a, column=1).value = a+1
37. ws1.cell(row=7+a, column=2).value = str(message.Subject)
38. ws1.cell(row=7+a, column=3).value = hiduketime
39. ws1.cell(row=7+a, column=4).value = str(message.Sender)
40. ws1.cell(row=7+a, column=5).value = str(message.body[0:100])
注意点2|セルB2とB3に集計開始と集計終了日を「yyyy/mm/dd」で入れ込んでおくこと
注意点3|ファイルパスを書き換える
8. filepath = 'C:/Users/---/Outlook_Book1.xlsx'
27. newfolder_path = 'C:/Users/---/Outlook_'+foldermake
57. newfilepath = 'C:/Users/---/Outlook_Book2.xlsx'
上記のプログラムは、開きたいファイルや保存したいファイルパスに応じて、書き換える必要があります。
注意点4|ライブラリを取得しておくこと
2. from openpyxl import load_workbook
3. import win32com.client
上記の2つはライブラリをインストールしておく必要があります。
ライブラリの読み込みはこちら(外部サイト)の記事を読むと分かりやすいです。
PythonがインストールされているPCであれば、以下のコードをコマンドプロンプトで入力し、EnterをおせばOpenpyxlを使えるようになります。
pip install openpyxl
pip install pypiwin32
これらの注意点を押さえないと、プログラムが正しく機能しないことがあります。
上記のサンプルコードを活用して、Outlook制御を試してみてください。