2016-03-23 22 views
0

私の会社は、私たちのプロセスの1つをもっと簡単にするためにGoogleフォームを作成しました。 Googleフォームは、フォームから入力されたすべてのデータを含むマスタースプレッドシートに基づいています。このスプレッドシートはフォーム提出を除外し、前述のように「マスタースプレッドシート」からすべての情報を取得する各部門のスプレッドシートにデータを送信します。電子メール通知を送信するGoogleシート

従業員がスプレッドシートでこれらのリクエストを承認または拒否すると、「承認済み」または「拒否」と入力した場合に電子メール通知が届きます。最近では、特定の人が顧客にリクエストを提出した場合に自動的に承認されるように変更しましたが、これを行うと誰も手作業で「承認済み」または「拒否」を入力していないため、これは手動で入力したときでも動作しますが、セルが自動的に入力されるとsendNotificationは機能しません。

個々の部門シートに実際のデータが入力されていないため、「マスターシート」に通知トリガーを入れたいと考えていましたが、電子メール通知を送信する時間があります。基本的には、「列F」のセルに電子メールアドレスの特定のリストが含まれている場合、実際に先に進んで変更を行うように通知する電子メールを第三者に送信します。

ここまではこれまでにあります。これは元々働いていたコードです。私は物事のさまざまなバリエーションを試してみたし、まったく運がなかったが、私はほとんどの教育を受けコーダないよ:

function sendNotification() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Form Responses 3"); 
    //Get Active cell 
    var mycell = ss.getActiveSelection(); 
    var cellcol = mycell.getColumn(); 
    var cellrow = mycell.getRow(); 
    var cellValue = mycell.getValue(); 

    var activeUser = Session.getActiveUser(); 
    var recipients = "[email protected]"; 
    var subject = "Update to "+ss.getName(); 
    var body = activeUser + " has marked row " + cellrow + " \"" + cellValue + "\" in \"" + ss.getName() + "\". Visit " + ss.getUrl() + " to view the changes."; 

    if (cellcol == 2) { 
    if (cellValue.indexOf('[email protected]') >= 0) { 
     var subject = "Lunch Is Served"; 
     Logger.log('Sending approval notification of row ' + cellrow + ' to ' + recipients); 
     MailApp.sendEmail(recipients, subject, body); 
    } 
    } 
} 

我々はlastRowNumberを使用することはできませんのでご注意下さい(少なくとも私は」なかったの私たちはすでに1000行以上がリストされているため、情報は自動的に配列に書き込まれます。ほとんどの場合、現在のトリガーは「フォーム提出時」に設定されています。提出された。

私は見ている人のためのサンプルスプレッドシートを含めました。フォームを記入する際は、あなたのEメールアドレスとして[email protected]を使用してください。

Googleスプレッドシートは、以下のサイトで見ることができます: Test Sheet!

どうもありがとう、私はあなたの回答を読んだことを楽しみにして!あなたがラインを使用することはできません

答えて

0

:その関数は、トリガーを「フォームの送信」から実行されている場合

var mycell = ss.getActiveSelection(); 

を、アクティブな選択がありません。ただし、現在編集されている範囲を示す "On Form Submit"イベントオブジェクトで使用できるプロパティがあります。フォームオブジェクトからイベントオブジェクトを取得する必要があります。次に3つのオプションがあります。 1)ちょうど値を取得する2)質問とその値のオブジェクトを取得する3)編集された範囲の範囲を取得する。まず、関数に渡されるイベントオブジェクトを取得します。フォームが送信されると、On Form Submitトリガーに関連付けられた関数でデータが自動的に使用可能になります。手紙eは通常、イベントオブジェクトを取得する変数名として使用されます。

function sendNotification(e) { 

をしかし、あなたは任意の変数名を使用することができます

function sendNotification(objOfData) { 

Apps Script Documentation - Spreadsheet - On Form Submit

function sendNotification(e) { 
    var cellValue = e.values[4];//Get the value in column 5 
+0

をするためにどうもありがとうございます@Sandy Goodに答える。唯一のことは、このコードを実行しようとすると、次のエラーメッセージが表示されることです。 "TypeError:未定義のプロパティ値"を読み取ることができません(行8、ファイル "コード") " ?あなたがもう一度それを見たいと思ったら、私はあなたの名前の下に新しいスクリプトを作成しました。また、フォーム上で尋ねられる5番目の質問であるため、[4]の代わりにe.values [5]ではないでしょうか?申し訳ありませんが、私はまだこのようなものには本当に新しいです。 – dhjeffery89

+0

また、もう1つのこととして、ユーザー名を自動的に記録するように通常のシートを設定しています。これは、実際のスプレッドシートの「列B」に記入され、電子メール通知で使用したかったものです。私は自動的にユーザー名を記録するオプションを選択できないので、このようなシートの質問をするように設定しました。それは私に多くの意味を助けるために再びありがとう。 – dhjeffery89

+0

コードエディタからコードを実行すると、オブジェクト 'e'は未定義になります。 'e'がオブジェクトを渡す唯一の方法は、フォームを送信し、その関数がon submitトリガーの関数である場合です。配列内の値には、ゼロベースのインデックスがあります。最初の値のインデックスはゼロです。 –

関連する問題