実現したいこと
- プロジェクトに必要な納品物の管理をしており、Googleスプレッドシートで特定の列が"完了"に更新された際に指定のアドレスにメールが飛ぶようにしたい
- 更新通知のメールの内容を指定したい
前提
- GoogleアカウントはGoogle Workspaceのものです
- 非エンジニアです。下記リンクを参考に後述しているコードを入れました。https://atmarkit.itmedia.co.jp/ait/articles/1902/19/news006.html
- トリガーは下記の通り設定しました。
実行する関数:onChangeStatus
デプロイ時に実行:Head
イベントのソースを選択:スプレッドシートから
イベントの種類を選択:編集時
エラー通知設定:今すぐメールを受け取る
発生している問題・エラーメッセージ
- スクリプトエディタ内で実行すると下記エラーが出ます。
TypeError: Cannot read properties of undefined (reading 'range') onChangeStatus @ コード.gs:2
- 実際にスプレッドシートで"完了"を入力し、実行ログを見ると、「種類:トリガー」で「完了」と出ていますが、メールは届きません。
該当のソースコード
H列を"完了"に変えると、指定のメールアドレスにB列のナンバー、F列の納品物の名前とともに完了通知を送りたいです。
function onChangeStatus(e){ var cell = e.range; var status = e.value; var sheet = cell.getSheet(); var column = cell.getColumn(); var row = cell.getRow(); var lastRow = sheet.getLastRow(); if(column === 8 && row >= 2 && row <= lastRow && status === '完了'){ sendmail(row); } } function sendmail(row){ var FIELDS = { no: 1, nouhinname: 5, } var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues(); var index = row - 1; var myNo = values[index][FIELDS.no]; var nouhinname = values[index][FIELDS.nouhinname]; var recipient = '○○○@---.co.jp(指定のメールアドレス)' ; var recipientName = '完了通知'; var subject = ''; subject += 'タスク完了 [' + myNo + '] '+nouhinname+''; var body = ''; body += recipientName + '\n'; body += '以下を納品しました。\n' body += '[' + myNo + '] '+'\n'+ nouhinname +'\n'; GmailApp.sendmail(recipient, subject, body); }
試したこと
色々と検索しているとこちらの質問の回答を見つけました。
スクリプトエディタ内の実行であればエラーでも大丈夫なのかと思いましたが、実際にセルを「完了」に更新してもメールは届かず、前に進めない状況です。https://teratail.com/questions/313931
対処法をご教示いただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー