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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Google Apps Script

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

Q&A

解決済

1回答

424閲覧

11列目が空欄だった場合、メールを送信する

yoyoy

総合スコア14

Google Apps Script

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

0グッド

0クリップ

投稿2020/09/22 09:26

スプレッドシートで1~10列目は文字が入っているが、11列目が空欄だった場合、
空欄であることをメールで送信するといったscriptを設定しています。
トリガーは時間設定で17:00-18:00の間に設定をしました。

以下のscriptを作成しましたが、実行を行うと、大量のメールが送信されてしまいます。

どこを修正したらよいか、わからないため、こちらに投稿いたしました。

function

1 2 var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 3 var sheetData = sheet.getSheetValues(3, 2, sheet.getLastRow(), sheet.getLastColumn()); // シートのメールのデータを取得(2次元配列) 4 5 6sheetData.forEach(function(value, index){ 7 8 var title = "空欄です。";  //メール件名 9 var body =''; 10 body += '空欄です。\n'; 11 body += '\n'; 12 body += '確認をして下さい。\n'; 13 body += '\n'; 14 body += '\n'; 15 body += '詳細はこちらで確認 \n'; 16 body += ' ※スプレッドシートのURL※\n'; 17 body += '\n'; 18 body += ' \n'; 19 body += ' '; 20 21if (!value[10]) { 22 GmailApp.sendEmail('xxxxx@xxxxx', title , body); 23 24 } 25}); 26}

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

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

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

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

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

guest

回答1

0

ベストアンサー

11 列目って K 列でしょうか?
getSheetValues の 2 つ目の引数で 2 と指定しているので、B列が val[0] になります。このとき、val[10] は L 列です。本当にそれが正しい判定でしょうか?

もう 1 点、要件は1から10列が埋まっている、なので、その判定を加えたほうがいいと思います。
(そうすれば予想外にたくさんの余白行の分までメールが送信される事象を多くの場合回避できます)

テストしてないので予期しないバグがあるかも。

javascript

1const q293387 = () => { 2 const sheet = SpreadsheetApp.getActive().getActiveSheet(); 3 const sheetData = sheet.getDataRange().getValues(); 4 const alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 5 6 const columnMustBeEmpty = "K"; //アルファベットで空にすべき列を指定したほうが間違いがないと思います。 7 const columnsMustBeFilled = "ABCDEFGHIJ"; //上と同じ。 8 9 const col2BEmpty = columnMustBeEmpty.split("").map(e => alpha.indexOf(e)); 10 const cols2Bfill = columnsMustBeFilled.split("").map(e => alpha.indexOf(e)); 11 12 sheetData 13 .slice(2) // 1,2 行目をスキップ 14 .filter(e => col2BEmpty.map(i => e[i]).every(v => v === "")) 15 .filter(e => cols2Bfill.map(i => e[i]).every(v => v !== "")) 16 .forEach(e => send(e)); 17} 18const send = (r) => { 19 const subject = "空欄です。";  //メール件名 20 const body =`空欄です。 21 22確認をして下さい。 23 24 25詳細はこちらで確認 26 ※スプレッドシートのURL※ 27 28 29 `; 30 GmailApp.sendEmail('xxxxx@xxxxx', subject , body); 31}

投稿2020/09/25 19:31

編集2020/09/25 19:34
papinianus

総合スコア12705

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

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

yoyoy

2020/09/28 03:35

ありがとうございます! 11 列目って K 列となります。 「getSheetValues の 2 つ目の引数で 2 と指定しているので、B列が val[0] になります。このとき、val[10] は L 列です。」 →この件、大変参考になります。 空欄の列を指定するといった方法があることも、とても参考になりました! 空欄の列を指定する方法で設定を行ってみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問