2016-06-19 7 views
0

Ich bin verwirrt mit meinem benutzerdefinierten Skript für Google Apps (insbesondere für Google Spreadsheets).Senden von E-Mail von Google Apps

Ich reproduziert die Lektion von https://developers.google.com/apps-script/articles/sending_emails#section-2-improvements (siehe "Abschnitt 2: Verbesserungen"), aber es funktioniert nicht: Skript sendet alle E-Mails noch einmal, auch wenn die Zelle bereits "EMAIL_SENT" enthält (ich verwende "NOTIFICATION_SENT" statt Dies). Hier

ist die Quelle von maßgeschneiderten Skript:

var NOTIFICATION_SENT = "NOTIFICATION_SENT"; 

function NotifyNewBooking() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var startRow = 2; // First row of data to process 
    var numRows = 47; // Number of rows to process 
    // Fetch the range of cells A2:N48 
    var dataRange = sheet.getRange(startRow, 1, numRows, 17) 
    // Fetch values for each row in the Range. 
    var data = dataRange.getValues(); 
    for (var i = 0; i < data.length; ++i) { 
    var row = data[i]; 
    var emailAddress = "[email protected]"; 
    var subject = "Строка № " + row + ": " + "новое бронирование"; 
    var message = "Уведомление о новом бронировании!" + "\n" + "\nДанные нового бронирования:" + "\n" + "\nЗаезд: " + row[0] + "\nВыезд: " + row[1] + "\nНомер: " + "«" + row[2] + "»" + "\nТип размещения: " + row[3] + "\nЦена за ночь: " + row[4] + " руб." + "\nВнесённый депозит: " + row[8] + " руб." + "\n" + "\nИмя и фамилия гостя: " + row[5] + "\nМобильный телефон: " + row[6] + "\nЭлектронная почта: " + row[7] + "\n" + "\nПримечание: " + row[11] + "\n" + "\n* Просмотреть список всех бронирований можно тут: " + "www.bitly.com/b56guests"; 
    var notificationSent = row[17];  // The column where notification status is put 
    if (notificationSent != NOTIFICATION_SENT) { // Prevents sending duplicates 
     MailApp.sendEmail(emailAddress, subject, message, {name: "Мини-гостиница Бердянская 56", replyTo: "[email protected]"}); 
     sheet.getRange(startRow + i, 17).setValue(NOTIFICATION_SENT); 
     // Make sure the cell is updated right away in case the script is interrupted 
     SpreadsheetApp.flush(); 
    } 
    } 
} 

Das Ziel ist hier E-Mails nur zu senden, wenn die Zellen in der Spalte row[17] nicht NOTIFICATION_SENT enthalten. Bitte geben Sie mir einen starken Ratschlag, wie Sie es beheben können.

Vielen Dank im Voraus!

+0

die Beschreibung aktualisiert. – RLearnsR

Antwort

0

Das Problem ist in dieser Zeile: var notificationSent = row[17];

Versuchen Sie den Code debuggen, indem die Werte Logger.log(row[17]) und Logger.log(row[16]) Protokollierung und Sie werden undefined in der Zeile [17] und NOTIFICATION_SENT in der Zeile [16] erhalten.

Warum? Da Reichweite. getValues gibt einen zweidimensionalen Array zurück und Array-Indizes beginnen bei 0.

Es wird auch in der documentation angegeben.

Beachten Sie, dass während ein Bereichsindex bei 1, 1 beginnt, das JavaScript-Array von [0] [0] indiziert wird.

Während also die Reihe in Ordnung ist, weil Sie i in der for-Schleife auf 0 initialisiert haben.

sollten Sie 1 vom Index abziehen, wenn Sie eine Spalte erhalten.

var notificationSent = row[17 - 1]; 

denn wenn man 17 Spalten hat, wird erster Wert in einem Array von Index 0 bis beginnen bis 16.

Verwandte Themen