前提・実現したいこと
Google Spreadsheetで、importrangeで拾ってきた情報を差し込んだメール配信を使っています。毎日そのメールを送信しているのですが、同じ作業を毎日するのも面倒だ、ということで、調べたところトリガーで定刻になったら自動的に配信できるようにしたいのです。
発生している問題・エラーメッセージ
前述の通り、トリガーを設定するだけならかんたんに出来たのですが、そのSpreadsheetを開いていないと、importrangeがデータを拾ってこないようで、正しい情報が差し込まれなくなってしまいました。
該当のソースコード
1function sendEmail() { 2 /* スプレッドシートのシートを取得と準備 */ 3 var ss = SpreadsheetApp.getActiveSpreadsheet(); // このファイル 4 var mainSheet = ss.getSheetByName("main"); // メインシート 5 var skSheet = ss.getSheetByName("sashikomi"); // 差込シート 6 var skEndRow = skSheet.getDataRange().getLastRow(); // シートの使用範囲のうち最終行を取得 7 var attachedFileId = mainSheet.getRange(7, 2).getValue(); // 添付ファイルのID 8 9 /* メール基本データの設定 */ 10 var strFrom = mainSheet.getRange(3, 2).getValue(); // fromメールアドレス 11 var strSender = mainSheet.getRange(4, 2).getValue(); // 差出人の名前 12 var strSubject = mainSheet.getRange(5, 2).getValue(); // メールタイトル 13 var strBody = mainSheet.getRange(6, 2).getValue(); // 本文 14 if (attachedFileId) { 15 var attachedFile = DriveApp.getFileById(attachedFileId); // 添付ファイル 16 } 17 18 var strSubjectIns = ""; // 差込後のメールタイトル 19 var strBodyIns = ""; // 差込後のメール本文 20 21 for (var i = 2; i <= skEndRow; i++) { 22 // 差込シートの取得 23 var strToEmail = skSheet.getRange(i, 1).getValue(); // 送信先メール 24 var strCc = skSheet.getRange(i, 2).getValue(); // CC 25 var strBcc = skSheet.getRange(i, 3).getValue(); // BCC 26 var sk1 = skSheet.getRange(i, 4).getValue(); // 差込① 27 var sk2 = skSheet.getRange(i, 5).getValue(); // 差込② 28 var sk3 = skSheet.getRange(i, 6).getValue(); // 差込③ 29 var sk4 = skSheet.getRange(i, 7).getValue(); // 差込④ 30 var sk5 = skSheet.getRange(i, 8).getValue(); // 差込⑤ 31 var sk6 = skSheet.getRange(i, 9).getValue(); // 差込⑥ 32 var sk7 = skSheet.getRange(i,10).getValue(); // 差込⑦ 33 var sk8 = skSheet.getRange(i,11).getValue(); // 差込⑧ 34 var sk9 = skSheet.getRange(i,12).getValue(); // 差込⑨ 35 var skA = skSheet.getRange(i,13).getValue(); // 差込10 36 var skB = skSheet.getRange(i,14).getValue(); // 差込11 37 var skC = skSheet.getRange(i,15).getValue(); // 差込12 38 39 // 差込を反映 40 strSubjectIns = strSubject.replace(/$1/g, sk1).replace(/$2/g, sk2).replace(/$3/g, sk3).replace(/$4/g, sk4).replace(/$5/g, sk5).replace(/$6/g, sk6).replace(/$7/g, sk7).replace(/$8/g, sk8).replace(/$9/g, sk9).replace(/$A/g, skA).replace(/$B/g, skB).replace(/$C/g, skC); //タイトル 41 strBodyIns = strBody.replace(/$1/g, sk1).replace(/$2/g, sk2).replace(/$3/g, sk3).replace(/$4/g, sk4).replace(/$5/g, sk5).replace(/$6/g, sk6).replace(/$7/g, sk7).replace(/$8/g, sk8).replace(/$9/g, sk9).replace(/$A/g, skA).replace(/$B/g, skB).replace(/$C/g, skC); //本文 42 43 /* メール送信 */ 44 if (attachedFileId) { 45 // 添付ファイル有りの場合 46 GmailApp.sendEmail( 47 strToEmail, //toアドレス 48 strSubjectIns, //メールタイトル 49 strBodyIns, //本文 50 { 51 cc: strCc, //ccアドレス 52 bcc: strBcc, //bccアドレス 53 from: strFrom, //fromアドレス 54 name: strSender, //差出人 55 attachments: attachedFile //添付ファイル 56 } 57 ); 58 } else { 59 // 添付ファイル無しの場合 60 GmailApp.sendEmail( 61 strToEmail, //toアドレス 62 strSubjectIns, //メールタイトル 63 strBodyIns, //本文 64 { 65 cc: strCc, //ccアドレス 66 bcc: strBcc, //bccアドレス 67 from: strFrom, //fromアドレス 68 name: strSender, //差出人 69 } 70 ); 71 } 72 } 73 Browser.msgBox("送信が完了しました。"); 74}
試したこと
ファイルを適当なPCで開きっぱなしにしていたら、トリガーで実行してもちゃんと差し込まれていました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。