【Python】delete メソッドとpyperclipでメールの入力内容を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 [“お名前”]に入れます。

    よかったらシェアしてね!
    • URLをコピーしました!
    目次