質問: "テスト.pdf"; //PDFをドライブへ作成(保存されます) DriveApp.createFile(pdf).setName(pdfname); /* メール表題、fromアドレス、差出人名を準備 */ var strSubject="テストタイトル"; //表題 var strFrom="メールアドレス"; //From var strSender="名前"; //差出人 /* シートの全ての行について社名、姓名を差し込みログに表示*/ for(var i=2;i<=rowSheet;i++){ var strCompany=spreadsheet.getRange(i,1).getValue(); //社名 var strSecond=spreadsheet.getRange(i,2).getValue(); //姓 var strFirst=spreadsheet.getRange(i,3).getValue(); //名 var strTo=spreadsheet.getRange(i,4).getValue(); //toアドレス var strBody=strDoc.replace(/{社名}/,strCompany).replace(/{姓}/,strSecond).replace(/{名}/,strFirst); //社名、姓名を置換 Logger.log(strBody); //ドキュメントの内容をログに表示 } GmailApp.sendEmail( strTo, strSubject, strBody, {attachments:pdf} ); } ### 試したこと データレンジを変更してみたりなどしたのですが、うまくいきませんでした。 ### 補足情報(言語/FW/ツール等のバージョンなど) こちらのコードを書くために参照したURL リンク内容 リンク内容 リンク内容
回答: メール1件ごとに送信先アドレスを変更したいことを前提としますと、 forループの{}中にメール送信部を入れ込んでください。 Logger.log(strBody); //ドキュメントの内容をログに表示 } ←このカッコを GmailApp {attachments:pdf} ); } ←ここに移すだけ スクリプト実行制限の5分とかからない送信件数ならこれだけで実行できると思います。 pdf作成が追い付かなくて途中で止まってしまうケースもありえますので、 送信済フラグかタイムスタンプをスプレッドシート側に1件ごとに書き込んでおいた方が よいかもしれません。 これらで困ったらまた質問してください ``` for(var i=2;i<=rowSheet;i++){ var strCompany=spreadsheet.getRange(i,1).getValue(); //社名 var strSecond=spreadsheet.getRange(i,2).getValue(); //姓 var strFirst=spreadsheet.getRange(i,3).getValue(); //名 var strTo=spreadsheet.getRange(i,4).getValue(); //toアドレス var strBody=strDoc.replace(/{社名}/,strCompany).replace(/{姓}/,strSecond).replace(/{名}/,strFirst); //社名、姓名を置換 Logger.log(strBody); //ドキュメントの内容をログに表示 GmailApp.sendEmail( strTo, strSubject, strBody, {attachments:pdf} ); } ```