質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1576閲覧

python Trueの部分だけ実行させたい

0799750

総合スコア2

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/06/11 06:56

編集2021/06/18 05:21

前提・実現したいこと

歴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/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/17 10:43

現状の質問文と画像だけではシート1とシート2の役割・関係がはっきり分かりませんね。 ・シート1は多分、真ん中の画像なんでしょうけれど、それではシート2には何が記載されているのでしょうか。 ソースコードを見ると、シート1の4列目から添付ファイルのファイルパスを取得して、それをattachmentという変数に入れている。 その後attachementとシート2の1列目が合致していれば、attachmentを添付して指定したアドレスにメールを送りたい、というようにも見えます。 しかし、ここで以下のことが分かりません。 ・シート2の役割は何なのか?どのようなデータがシート2に記載されているのか。 シート1はメールリスト?シート2は頻繁に内容が変化するのか?
0799750

2021/06/17 23:59

globで取ってきたファイル名をsheet2に貼りつけてsheet1の4列目と合致させようと考えています。 一度ファイル名をとってきたらsheet2は都度消していくつもりです。
guest

回答1

0

自己解決

別の方法で解決しました。
ありがとうございました。

投稿2021/07/02 02:42

0799750

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問