2016-04-05 10 views
1

Bu sitedeki birçok okuma sayesinde, başarılı olmak istediğim şeyi yapan bir komut dosyası oluşturdum: Çalıştırıldığında, komut dosyası gönderir Bir e-tablodaki her yeni satır için tek tek bir e-posta adresi gönderin, ardından bu satırı "gönderildi" olarak işaretleyin. Yuppi!Bir e-tablodaki tüm yeni satırların değerleriyle tek bir e-posta gönder (Google Script/GAS)

Ancak şimdi tek bir e-postada tüm satırları birden çok bölüme derlemek için komut dosyasına ihtiyacım var. Bu yüzden, yeni satırları kontrol etmek için senaryoya ihtiyacım var, her yeni satırdaki değerleri tek bir bölüme eklemek için bir şablon kullanın, tüm yeni bölümleri bir e-postaya derleyin, e-postayı gönderin, ardından tüm yeni satırları "gönder" olarak işaretleyin.

Sıkıştığım her yeni eklenen satırın göreceli bir değişken tanımlaması gerektiği gibi görünüyor, yani ilk gönderilmemiş satır = sectionOne, second = sectionTwo, vs. Ama e-postanın uzunluğu ve değişken sayısı tanımlamak yeni satırların sayısına bağlı olacaktır. Bu yüzden, senaryoyu bir döngüden geçirmeyi ve e-posta gövdesine yeni içeriğin (ancak hepsinin) eklenmesini gerçekten bilmiyorum.

İşte sahip olduğum, burada hedefe nasıl ulaşılacağını bilen var mı?

çok fazla Kodu değiştirmeden
function sendEmail() { 

//setup function 
var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
var StartRow = 3; 
var RowRange = ActiveSheet.getLastRow() - StartRow + 1; 
var WholeRange = ActiveSheet.getRange(StartRow,1,RowRange,11); 
var AllValues = WholeRange.getValues(); 

//iterate loop 
for (i in AllValues) { 

//set current row 
var CurrentRow = AllValues[i]; 

//set subject line 
var Subject = "Found by " + CurrentRow[1]; 

//set HTML template for information 
var message = 
     "<p><b>Title: </b>" + CurrentRow[2] + "</p>" + 
     "<p><b>Agency: </b>" + CurrentRow[3] + "</p>" + 
     "<p><b>Summary: </b>" + CurrentRow[4] + "</p>" + 
     "<p><b>Due: </b>" + CurrentRow[5] + "</p>" + 
     "<p><b>Posted: </b>" + CurrentRow[6] + "</p>" + 
     "<p><b>Total Funding: </b>" + CurrentRow[7] + "</p>" + 
     "<p><b>Announcement Number: </b>" + CurrentRow[8] + "</p>" + 
     "<p><b>Useful Links: </b>" + CurrentRow[9] + "</p>"; 

//define column to check if sent 
var EmailSent = CurrentRow[11]; 

//define who to send grants to 
var SendTo = "[email protected]" + "," + "[email protected]"; 

//if row has not been sent, then... 
if (emailsent != "sent") { 

    //set the row to look at 
    var setRow = parseInt(i) + startRow; 

    //mark row as "sent" 
    ActiveSheet.getRange(setRow, 11).setValue("sent"); 

    //send the actual email 
    MailApp.sendEmail({ 
     to: SendTo, 
     cc: "", 
     subject: subject, 
     htmlBody: message, 
}); 
} 
} 
} 

cevap

2

, burada Senin için ne var:

function sendEmail() { 

//setup function 
var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
var StartRow = 3; 
var RowRange = ActiveSheet.getLastRow() - StartRow + 1; 
var WholeRange = ActiveSheet.getRange(StartRow,1,RowRange,11); 
var AllValues = WholeRange.getValues(); 

var message = ""; 
//iterate loop 
for (i in AllValues) { 

//set current row 
var CurrentRow = AllValues[i]; 

//define column to check if sent 
var EmailSent = CurrentRow[11]; 

//if row has been sent, then continue to next iteration 
if (EmailSent == "sent") 
    continue; 

//set HTML template for information 
    message += 
     "<p><b>Found by: </b>" + CurrentRow[1] + "</p>" + 
     "<p><b>Title: </b>" + CurrentRow[2] + "</p>" + 
     "<p><b>Agency: </b>" + CurrentRow[3] + "</p>" + 
     "<p><b>Summary: </b>" + CurrentRow[4] + "</p>" + 
     "<p><b>Due: </b>" + CurrentRow[5] + "</p>" + 
     "<p><b>Posted: </b>" + CurrentRow[6] + "</p>" + 
     "<p><b>Total Funding: </b>" + CurrentRow[7] + "</p>" + 
     "<p><b>Announcement Number: </b>" + CurrentRow[8] + "</p>" + 
     "<p><b>Useful Links: </b>" + CurrentRow[9] + "</p><br><br>"; 

    //set the row to look at 
    var setRow = parseInt(i) + startRow; 

    //mark row as "sent" 
    ActiveSheet.getRange(setRow, 11).setValue("sent"); 
} 

//define who to send grants to 
var SendTo = "[email protected]" + "," + "[email protected]"; 

//set subject line 
var Subject = "Grants"; 


    //send the actual email 
    MailApp.sendEmail({ 
     to: SendTo, 
     cc: "", 
     subject: Subject, 
     htmlBody: message, 
}); 
} 

Yani esasen onunla erişilebilir, böylece biz döngü için dışarıya mesaj değişkenin kapsamını değiştirmek her yineleme sırasında aynı içerik. Daha sonra her yeni kayıt için ek HTML içeriğini mesaj değişkenine ekleriz. E-postanın daha ileri bir zamanda gönderilip gönderilmediğini kontrol ettim, ki bu aslında çok hızlı bir şekilde hızı artırıyor ama mesaj değişkenimizi de rahatsız etmiyor. Son olarak, e-posta gönderen parçayı for döngüsünden çıkardım, çünkü verilerimizi döngü içinde topladık.

Biraz daha zaman harcamış olsaydım, bu kodu değiştirebilir ve daha kolay anlaşılır hale getirebilir ve muhtemelen HTML içeriğini bir tablo biçiminde değiştirebilirim, ancak bu şimdiki işi yapmalıdır.

Bu kodu test etmedim, çünkü ben bunu yolda yapıyorum, ama sorun olmayacağını düşünüyorum. Daha fazla yardıma ihtiyacın olursa bana bildir.

+0

Yardımınız çok yardımcı oldu! Okuma kolaylığı için bazı küçük değişiklikler yaptım, ama sana çok müteşekkirim. Teşekkür ederim! –

+0

Sorununuzu çözdüğünü duyduğuma sevindim! – Gerneio

+0

Bu çözüm işe yaramıyor ... – testing123

0

Benzer bir çözüm, ancak küçük kodları temizledim.

/* please edit this function for your message format */ 
function buildMessageRow(row) { 
    return (
    'Name:' + row[0] + 
    'Email:' + row[1] + '\n' 
); 
} 

function sendEmail() { 
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
    const allValues = sheet.getDataRange().getValues(); 
    const columnForSentMarker = 5; /* sent marker column */ 
    const markerForSentEmail = 'email_fwd'; 
    var messages = ''; 
    allValues.forEach(function (row, index) { 
    if (index === 0) return; /* skip 1st row for labels */ 
    if (row[columnForSentMarker - 1] === markerForSentEmail) 
     return; 
    messages += buildMessageRow(row); 
    sheet.getRange(index + 1, columnForSentMarker).setValue(markerForSentEmail); 
    }); 
    Logger.log(messages); /* TODO: change logging to email sending */ 
} 

Referans için my test document'u paylaştım.

İlgili konular