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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google スプレッドシート

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

Google Apps Script

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Google

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

Q&A

解決済

1回答

1516閲覧

スプレッドシートでステータスが変更された際に自動アラートメールを送信したいです。

bibi_popo

総合スコア2

Google スプレッドシート

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

Google Apps Script

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Google

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

0グッド

1クリップ

投稿2021/09/27 06:12

前提・実現したいこと

スプレッドシートで管理表を作成し、ステータスが変更された場合に自動でメール通知を送ることができるようにしたいです。
onChangeStatusで対応しようと思い、作成したコードは以下の通り。

function onChangeStatus(e){ var ss = SpreadsheetApp.getActiveSheet(); var values = ss.getDataRange().getValues(); var dRange = ss.getDataRange(); 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 === 17 && row >= 5 && row <= lastrow && status === '対応中'){ sendEmail(row); } } function sendEmail(row){ var FIELDS = { day: 3, time: 4, call: 2, agent: 6, policy: 8, request: 9, limit: 10, client: 5, } var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues(); var index = row - 1; var day = values[index][FIELDS.day]; var call = values[index][FIELDS.call]; var time = values[index][FIELDS.time] var client = values[index][FIELDS.client]; var ag = values[index][FIELDS.ag]; var policy = values[index][FIELDS.policy]; var request = values[index][FIELDS.request]; var limit = values[index][FIELDS.limit]; var recipient = 'アドレス' var requestName = '受電履歴' var subject = ''; subject += '【'+limit+'】受電記録 代理店 '+ag+'' var body = '';

上記を実行すると以下のエラーメッセージが発生しました。

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

TypeError: Cannot read property 'range' of undefined

該当のソースコード

var cell = e.range;

試したこと

引数の問題かと思い、引数を変更等しましたが変わらずrangeの定義ができません。
初心者のため基本的な質問かと存じますがご回答いただけますと幸いです。

補足情報(FW/ツールのバージョンなど)

Google Workspaceのビジネス用の利用ですがセキュリティ上制限が多いです。
この要因でできない可能性等あればご教示いただけますと幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Changeは、スプレッドシートの構造の変更が行われたときに発火します。
スプレッドシートのセルに書き込まれた場合などはChangeではなくEditです。

Changeの場合イベントオブジェクトにrangeはありません。
Editの場合はrangeがあります。

下記ドキュメントを読んでください。

Event Objects | Apps Script | Google Developers

投稿2021/09/27 06:26

itagagaki

総合スコア8402

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

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

bibi_popo

2021/10/01 05:26

ご回答ありがとうございました。 ご連絡遅くなり申し訳ございません。 OnEditで対応してみましたが、シートを操作するとやはり TypeError: e.range is not a function とプロジェクトを正常に完了できない状況です。 解決方法あればご教示いただけますと幸甚です。
itagagaki

2021/10/01 05:32

e.range is not a function ですか? ということは e.range() という誤ったコードがあるのでは? 質問に提示されていたコードには無いようですが。 range はプロパティであって関数(メソッド)ではないので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問