2016-04-05 29 views
0

Burada ilk soru, ama son birkaç gündür bu siteyi inceliyordum. Ben google öğretici tabanlı komut dosyası ile görebildiğiniz gibi bu konuda inanılmaz derecede yeniyim!Javascript'te yeni, "ReferenceError:" sayfası alınıyor "tanımlı değil." Çok fazla değil

bir Google elektronik tablosu birden fazla kağıda eklenir bilgilere dayalı e-postalar göndermek için zamanlanmış tetikleyici içeren bir senaryo kurma görevi verilen. Bunu bir Google E-tablosunda 3 farklı sayfa ile çalışmaya çalışıyorum.

Çok teşekkürler, bu site bilgi hazinesi olmuştur.

DÜZENLEME: Eğer tüm biraz daha ileri kazanılmış ettik teşekkürler. Tüm sayfalara e-posta gönderebiliyorum, ancak yalnızca referans olarak verdiğim son sayfa, e-postaları "Destek Ekibi" olarak gönderir. İlk iki sayfa, bir kerede "Yöneticiler" ve "Öğretmenler" de bir e-posta gönderir. Umarım bunun için basit bir sebep vardır. Eminim senaryolarım günah ve gereksiz olarak çirkin.

var EMAIL_SENT = "EMAIL_SENT"; 

function sendEmails2() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheets = ss.getSheets(); 
    var startRow = 2; 
    var numRows = 1000; 
    var sheet = ss.getSheetByName ('Administrators') 
    var dataRange = sheet.getRange(startRow, 1, numRows, 1000) 
    var data = dataRange.getValues(); 
    for (var i = 0; i < data.length; ++i) { 
    var row = data[i]; 
    var emailAddress = row[1]; 
    var message = row[28];  
    var emailSent = row[29]; 
    if (emailSent != EMAIL_SENT) { 
     var subject = "Tuition Reimbursement Status"; 
     MailApp.sendEmail(emailAddress, subject, message); 
     sheet.getRange(startRow + i, 30).setValue(EMAIL_SENT); 

    var sheet = ss.getSheetByName ('Teachers') 
    var dataRange = sheet.getRange(startRow, 1, numRows, 1000) 
    var data = dataRange.getValues(); 
    for (var i = 0; i < data.length; ++i) { 
    var row = data[i]; 
    var emailAddress = row[1]; 
    var message = row[28];  
    var emailSent = row[29]; 
    if (emailSent != EMAIL_SENT) { 
     var subject = "Tuition Reimbursement Status"; 
     MailApp.sendEmail(emailAddress, subject, message); 
     sheet.getRange(startRow + i, 30).setValue(EMAIL_SENT); 

    var sheet = ss.getSheetByName ('Support Staff') 
    var dataRange = sheet.getRange(startRow, 1, numRows, 1000) 
    var data = dataRange.getValues(); 
    for (var i = 0; i < data.length; ++i) { 
    var row = data[i]; 
    var emailAddress = row[1]; 
    var message = row[28];  
    var emailSent = row[29]; 
    if (emailSent != EMAIL_SENT) { 
     var subject = "Tuition Reimbursement Status"; 
     MailApp.sendEmail(emailAddress, subject, message); 
     sheet.getRange(startRow + i, 30).setValue(EMAIL_SENT); 



     SpreadsheetApp.flush(); 
     } 
    } 
    } 
    } 
    } 
} 
} 
+0

emin değil Bunu 'sheets' tanımlı değil' sheet' sahip – brk

+0

yaprak veya levha olacaksa. 'sheets' bir değer dizisidir. Bu yüzden eğer 'bir sayfadan' yaprak 'çıktıysanız' index [sayfa] 'gibi indeksine göre seçmeniz gerekiyorsa, –

+0

Wow, gerçekten hızlı yorumlar, herkese teşekkürler. Evet, "var dataRange = sheets.getRange (startRow, 1, numRows, 1000)" ile değiştirdiğimde, "Yeni bir hatayla karşılaştım", TypeError: Nesne yöneticisi, Öğretmenler, Destek Personeli'nde getRange işlevi bulunamıyor. satır 8, dosya "Kod") "Looksl daha çok ilerlediğim gibi, herkese teşekkürler! –

cevap

0

Henüz bu test etmedim. Ancak, ideal olarak, sayfa nesnesindeki her sayfa için sendEmails2() yöntemini çağırmanız gerekir.

var EMAIL_SENT = "EMAIL_SENT"; 

var sheets = ['Administrator', 'Teachers', 'Support Staff']; 



function sendEmails2(sheetName) { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName(sheetName); 
    var startRow = 2; 
    var numRows = 1000; 
    var dataRange = sheet.getRange(startRow, 1, numRows, 1000) 
    var data = dataRange.getValues(); 
    for (var i = 0; i < data.length; ++i) { 
    var row = data[i]; 
    var emailAddress = row[1]; 
    var message = row[28];  
    var emailSent = row[29];  
    if (emailSent != EMAIL_SENT) { 
     var subject = "Tuition Reimbursement Status"; 
     MailApp.sendEmail(emailAddress, subject, message); 
     sheet.getRange(startRow + i, 30).setValue(EMAIL_SENT); 



     SpreadsheetApp.flush(); 
    } 
    } 
} 



for(i=0; i<sheets.length;i++){ 
    sendEmails2(sheets[i]); 

} 
+0

Tekrar teşekkürler Nick. Ben bunu denedim ve her bir sayfaya ayrı ayrı başvurmadan sheet.getrange etrafında alamadım. Komutumu orijinal gönderime gönderdim. Şu anda üç sayfanın üzerinde çalışıyor, yalnızca referans verilen üçüncü sayfa yığın halinde e-posta alıyor. Diğer iki sayfa, senaryoyu her çalıştırdığımda sadece birer birer alıyor! Düşüncesi olan var mı? Tekrar teşekkürler. –

+0

@AlexSmyk Kodumu güncelledim, böylece her sayfayı ayrı ayrı aramak zorunda kalmayacaksınız. Yukarıdaki düzenlenmiş kodu deneyin. Bir zaman sorununda toplu/biriyle ilgili olarak emin değilim, daha önce kullandığınız kütüphaneyi kullanmadım. –

+0

Olduğu gibi çalıştırırsam, satır 9'da bir sayfa adı tanımlamamı isteyen bir hata alıyorum. Bir sayfa ismini, 'ss.getSheetByName (' Yöneticiler ') gibi doldurursam, bu yalnızca bir sayfa için çalışır . Diğer sayfaları eklediğimde: 'ss.getSheetByName ('Yöneticiler', 'Öğretmenler', 'Destek Personeli')' verir ve "getSheetByName (string, string) yöntemini bulamıyor. –

İlgili konular