【Python】メールの入力内容をExcelに自動仕分け

プログラムの全体像

今回はメールからコピーしたテキストの必要な情報をExcelファイルに追加するプログラムを作成します。

プログラムと同じフォルダー内に書き込み先の「顧客リスト.xlsx」を入れておきます。mail.txtがサンプルのメール文面を書いたものなので、実際にはメールアプリなどからコピーすることになります。

動画で解説

サンプルコード

下のボタンよりサンプルファイルををダウンロードできます

実行の流れ

mail_form.pyを実行すると、入力フォームが現れます
メールの内容を貼り付けたmail.txtをコピーして、フォームに貼り付けます
Excelに項目内容が自動振り分けされ、貼り付けられます。
mail_form.py
from socket import MsgFlag
import pandas as pd
import pyperclip
import tkinter as tk
from tkinter import Grid, messagebox

def pasteMsg(e):
msgText.delete("1.0","end")
msgText.insert("1.0",pyperclip.paste())


def getData():
msg=msgText.get("1.0","end")
msgList=msg.splitlines()
work=[]
for m in msgList:
if m =="":
continue
else:
work.append(m)
msgList=work
dataDic={}
#データ取得ループ
for i in range(len(msgList)):
if "・希望プレゼント" in msgList[i]:
dataDic["・希望プレゼント"]=msgList[i+2]

if "・お名前" in msgList[i]:
dataDic["・お名前"]=msgList[i+1]

if "・ふりがな" in msgList[i]:
dataDic["・ふりがな"]=msgList[i+1]

if "・メールアドレス" in msgList[i]:
dataDic["・メールアドレス"]=msgList[i+1]

if "・高校名" in msgList[i]:
dataDic["・高校名"]=msgList[i+1]

if "・学年" in msgList[i]:
dataDic["・学年"]=msgList[i+1]

if "・希望学校" in msgList[i]:
dataDic["・希望学校"]=msgList[i+1]

if "・送信日時" in msgList[i]:
dataDic["・送信日時"]=msgList[i+1]

#Excelに書き出し
df=pd.read_excel("顧客リスト.xlsx",engine="openpyxl")
data=[
dataDic["・送信日時"],dataDic["・希望学校"],
dataDic["・お名前"],dataDic["・ふりがな"],
dataDic["・学年"],dataDic["・高校名"],
dataDic["・メールアドレス"],dataDic["・希望プレゼント"]
]
df2=pd.DataFrame([data],columns=df.columns)
df=df.append(df2)
#シートを書き出し
with pd.ExcelWriter("顧客リスト.xlsx") as writer:
df.to_excel(writer,index=False,columns=df.columns)
messagebox.showinfo("完了","Excelデータの追加が完了しました")

#GUIの用意
root=tk.Tk()
root.title("申し込みメールをExcelに追加")
root.geometry("750x355")
root.grid()
msgLabel=tk.Label(root,text="メッセージ")
msgText=tk.Text(root,borderwidth=3,height=25,relief="ridge")
msgText.bind("<Button-1>",pasteMsg)
#データ追加ボタン
getButton=tk.Button(root,text="データ追加",command=getData)
msgLabel.grid(row=1,column=1)
msgText.grid(row=1,column=2)
getButton.grid(row=1,column=3)

root.mainloop()

コードの解説

bindメソッド

今回はbindメソッドよって、クリック時にpasteMsg関数を呼び出すように設定しています。

引数の<“Button-1”>はマウスの左ボタンを表しており、ホイールボタンと紐付けたい場合は<“Button-2”>、右ボタンを紐付けたい場合は、<“Button-3”>と設定します。

bindメソッドはマウスのボタンだけではなく、キーと紐づけることもできます。例えば<“Return”>や<“tab”>と指定すると、EnterキーやTabキーを押したときに関数を呼び出せます。

delete メソッドとpyperclip

テキストボックスからテキストを削除するものです。今回はテキストの挿入もしたいので、削除後に insertメソッドを呼び出しています。第2引数にしている pyperclip.paste() は、pyperclip というパッケージの関数です。 paste関数を呼び出すだけで、現在クリップボードに保管されている内容を貼り付けることができます。pyperclip のおかげで、テキストボックスをクリックするだけで貼り付けできます。

getメソッドでテキストボックスからテキストを取り出し、 splitlines メソッドで1行ずつ分割したリストに変換します。 そのあとのループは、空白行を取り除く処理です。 最終的に変数msgList には、メールから空白行を取り除き、1行ずつ並べたものが入ります。

辞書への登録

繰り返し処理によって目的の項目を探し、 変数dataDicの辞書に追加する処理です。 現在見ている行に「お名前」が入っていれば、
1行下(「希望プレゼント」の場合のみ2行下) の内容を dataDic [“お名前”]に入れます。

最新情報をチェックしよう!
>プログラミング 独学

プログラミング 独学

本当にプログラミングを学びたい人のためになるブログにしたいと思っていますので、些細なことでも気が付いたのであればご報告いただけると幸いです。

CTR IMG