2016-05-11 6 views
0

Ich verwende Google Sheets Skript, um eine E-Mail zu senden, wenn sie noch nicht gesendet wurde.Verwenden Sie Google Sheets Script zum Senden von E-Mails, wenn der Zellenwert null ist, und aktualisieren Sie dann den Zellenwert. Wenn bereits ausgefüllt, überspringen Sie Zeile

colA:   colN: 
[email protected] Yes 
[email protected] 
[email protected] Yes 

Ich möchte mein Skript den Wert von colB überprüfen. Wenn null, senden Sie die E-Mail und ändern Sie den Wert in Ja. Wenn nicht Null, überspringen Sie und fahren Sie mit der nächsten Zeile fort. Hier ist was ich bisher habe.

function sendEmails() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var startRow = 23; 
    var numRows = 2; 
    var dataRange = sheet.getRange(startRow, 1, numRows, 13) 
    var data = dataRange.getValues(); 
    for (var i=0; i < data.length; i++) { 
    var row = data[i]; 
    // If Column N is null 
    if (data[i][13] === ""){ 
     var emailAddress = row[0]; // First column of selected data 
     var message = "....." ; // Assemble the body text 
     var subject = "....."; 
     MailApp.sendEmail(emailAddress, subject, message); 
     data[i][13] = "Yes"; 
    } 
    } 
dataRange.setValues(data); 
} 

Jede Hilfe würde sehr geschätzt werden.

+0

Dank! Das hat sicherlich geholfen. Ich aktualisiere jetzt den gewünschten Datensatz, aber anscheinend entferne ich alle anderen Datensätze aus meinem Quelldokument. Überschreibe ich mehr Datensätze als nur die zwei, die ich aktualisieren wollte? – inquisitiveDeveloper

Antwort

0

1) Ihr Bereich hat 13 Spalten, was bedeutet, dass in JavaScript der zweite Array-Index 0 ... 12 ist. Sie beziehen sich auf 13, die außerhalb der Grenzen liegt.

2) Wie geschrieben, schreibt dataRange.setValues(data); über den gesamten dataRange. Wenn der Bereich Formeln enthält, werden sie durch statische Werte ersetzt, was unerwünscht ist. Ansonsten sollte der Inhalt so bleiben wie er war, mit Ausnahme der Einträge von data, die Sie geändert haben. Wenn jedoch nur wenige Werte in einem Blatt geändert werden, ist es besser, sie einzeln zu aktualisieren, wie unten gezeigt.

Statt

data[i][12] = "Yes"; 

können Sie anrufen

dataRange.offset(i, 12, 1, 1).setValue("Yes"); 
+0

Danke @sandwich! Genau das habe ich mir erhofft, wusste aber nicht wie. – inquisitiveDeveloper

Verwandte Themen