🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

1901閲覧

GASで差し込みメールの配信をしているのですが、トリガーを使って自動配信にしようとしたら上手くいかない

ish314

総合スコア1

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2021/02/01 13:02

前提・実現したいこと

Google Spreadsheetで、importrangeで拾ってきた情報を差し込んだメール配信を使っています。毎日そのメールを送信しているのですが、同じ作業を毎日するのも面倒だ、ということで、調べたところトリガーで定刻になったら自動的に配信できるようにしたいのです。

発生している問題・エラーメッセージ

前述の通り、トリガーを設定するだけならかんたんに出来たのですが、そのSpreadsheetを開いていないと、importrangeがデータを拾ってこないようで、正しい情報が差し込まれなくなってしまいました。

該当のソースコード

Google

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

時間の経過した質問ですが、GASの未回答を減らしたいため回答します。

importrange関数が動かないので値が取れないということですかね?
importrange関数はアクセス権限を持っているスプレッドシートまでしか作用しないはずなので、
GASでそのシートにアクセスして直接値を取得するという形ではダメなのでしょうか?

importrangeを使用しているシートの配列等が不明なので、具体的なコードが提示できずすみません。

投稿2021/05/28 15:00

Tatsunosuke

総合スコア599

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問