プログラムの全体像
今回はメールからコピーしたテキストの必要な情報を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 [“お名前”]に入れます。