前提・実現したいこと
歴1か月です。
pythonを使用して
ディレクトリ内に入ってきたファイルをエクセルのメールリストに基づいて
メールを自動送信、まで実行をしたいです。
・ディレクトリ内のファイル名取得
・Excelのメールリストからメール送信
は作成したのですが
・取得したファイル名だけをExcelのメールリストから選択
の部分のコードで悩んでいます。
True Falseであってますか?
部分のコードを教えていただきたいです。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
outlook=win32com.client.Dispatch("Outlook.Application")#outlookを起動 filepath='C:/Users/0794752/Desktop/お/メールリスト.xlsx'#メールリストを読み込む wb=px.load_workbook(filename=filepath)#filepathのExcelを読み込む ws1=wb.worksheets[0]#ws1を「sheet1」に設定 ws2=wb.worksheets[1]#ws2を「sheet2」に設定 sh1_values=[[cell.value for cell in row]for row in ws1]#sheet1のデータを取得 sh2_values=[[cell.value for cell in row]for row in ws2]#sheet2のデータを取得 for i in range(1,len(sh1_values)):#sheet1のデータを1からlenまで繰り返す attachment=sh1_values[i][4]#attachmentに[i行][4列目]のデータを入れる username=sh1_values[i][2]#usernameに[i行][2列目]のデータを入れる mailaddress=sh1_values[i][3]#mailadressに[i行][3列目]のデータを入れる file=sh1_values[i][1]#fileに[i行][1列目]のデータを入れる print(username) print(mailaddress) print(file) print(attachment) with open('C:/Users/0794752/Desktop/お/本文テキスト.txt',mode='r',encoding="utf-8_sig")as f:#テキストファイルを読み取る body=f.read() files=glob.glob("C:/Users/0794752/Desktop/お/箱1/*")#箱1のフォルダ名読み込み for file in files: print(file) with open('filepath','a')as f:#fにfilepathの変数を取り込む print ('file',file=f) flag=False#flagをFalseにリセット for j in range(1,len(sh2_values)):#sheet2のattachmentをひとつずつ調べる if attachment==sh2_values[j][0]:#もしattachmentが一致していれば flag=True#flagをTrueに書き換える break#繰り返し処理を強制終了 body=body.replace("{名前}",username)#本文の{名前}をusernameを置換する mail=outlook.createItem(0) mail.bodyFormat=1 mail.To=mailaddress mail.cc='じぶん' mail.Subject='てすと' mail.Body=body attachment = os.path.abspath(attachment) #attachmentにフルパスを設定 mail.Attachments.Add (attachment) #メールの添付ファイルにattachmentを追加 mail.Display(0) #メールの確認 mail.Send() #メールを送る print(f'{mailaddress}に[subject}を送信しました')
試したこと
for i in range(len(sh1_values),1,len(sh2_values)): if sh1_values==sh2_values: attachment=sh1_values[i][4] username=sh1_values[i][2] mailaddress=sh1_values[i][3]
このコード使ってみたら
body=body.replace("{名前}",username)
NameError: name 'username' is not defined
このエラーが出ました。
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー