我正在使用一個Google Sheet來發送電子郵件通知(這里不能使用Google Form)。我在資訊文本方面遇到了一個問題。
基本上,該電子表格根據用戶資料添加了新的行。它添加了五列:
目標是,電子表格然后向每個學生發送一封電子郵件,告訴他們在哪里報告。它應該只給每個學生發一次電子郵件,但對于每封電子郵件,姓名、學院教師和請求教師欄位應該是動態的。
作業原理:如果你只有一行資料(或一個新行),它會發送正確的資訊,并記錄他們被通知。無論是向一個人還是向多人(一個新行或多個)發送電子郵件,它至少會發送一條資訊,并記錄該資訊已發送。
不作業的地方:如果你有多于一行的新資料,它會給所有的人發送電子郵件,但是每封電子郵件中的姓名、學院教師和請求教師的變數只指第一行新資料。因此,哈利、西莫和赫敏都收到了發往他們正確地址的電子郵件,但電子郵件的文本都是相同的,反映了哈利的會議,而不是每個人的動態。同樣,如果只添加了一個新行,這個問題就不存在。
我希望不要使用onEdit標簽,我知道這可以解決這個問題。資料輸入錯誤時有發生,而且人們可以改變他們的想法。我寧愿將該函式設定為每10分鐘觸發一次。
以下是我根據我所看到的其他編碼拼湊出來的代碼:
function SendEmail() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet1=ss.getSheetByName('ConcatenatedReport') 。
var subject = sheet1.getRange(2,7).getValue() 。
var message = sheet1.getRange(2,9).getValue()。
var n=sheet1.getLastRow()。
for (var i = 2; i < n 1 ; i ) {
var name=sheet1.getRange(i,1).getValue()。
var teacher=sheet1.getRange(i,4).getValue()。
var instructor=sheet1.getRange(i,3).getValue()。
var teacher1=sheet1.getRange(i,4).getValue()。
var emailAddress = sheet1.getRange(i,5).getValue()。
var emailstatus = sheet1.getRange(i,6).getValue()。
if(emailstatus == ""/span>){
message=message.replace("<name>",name).replace("<teacher>",teacher) 。 replace("<instructor>",instructor).replace("<teacher1>",teacher1)。
MailApp.sendEmail(emailAddress, subject, message)。
sheet1.getRange(i,6).setValue("Notified");}}
"通知 "值使我們不會重復向同一個人發送電子郵件。該資訊的內容如下:
你好姓名變數,這封郵件是為了通知你,你與你的一位教授(教師變數)有約,在你的下一堂課上。請在第三節課后立即向你的班級教授(可變導師)報到,然后在接到通知后立即前往可變導師1的房間。
我哪里做錯了?我怎樣才能讓郵件正確地針對每個學生?
PS - 我想知道,我是怎么做到的?
PS - 我還非常希望它在電子郵件中只使用他們的名字,而不是姓,名,中。有什么方法可以做到這一點嗎?我的編碼技能很弱,所以有很多東西我不知道。非常感謝任何幫助!
uj5u.com熱心網友回復:
我相信你的目標如下。
- 你想發送
- 你想通過檢索單元格 "A2:F "中的值來發送電子郵件。而且,當 "F "列為空時,你想發送電子郵件。
在這種情況下,下面這個修改后的腳本如何呢?
修改后的腳本:
function SendEmail(){
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet1 = ss.getSheetByName('ConcatenatedReport')。
var [subject,,message] = sheet1. getRange(2, 7, 1, 3)。 getValues()[0]。
var lastRow = sheet1.getLastRow();
var values = sheet1.getRange("A2:F" lastRow).getValues() 。
values.forEach(([name,,instructor,teacher,emailAddress,emailstatus]/span>) => {
if (emailstatus == ""/span>) {
var temp = message;
var teacher1 = teacher;
temp = temp.replace("<name>", name).replace("<teacher> ", teacher) 。 replace("<instructor>", instructor).replace("<teacher1>", teacher1) 。
MailApp.sendEmail(emailAddress, subject, temp)。
}
});
sheet1.getRange("F2:F" lastRow).setValue("notified")。
}
- 在你的腳本中,通過
message=message.replace("<name>",name)...,message被第一個回圈覆寫了。這樣,在第2個回圈之后,messaeg沒有被更新。我想,這可能是你的問題的原因。 - 而且,當
getValues被使用時,程序成本將變得很低。
參考資料:
uj5u.com熱心網友回復:
你快到了
function SendEmail(){
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet1=ss.getSheetByName('ConcatenatedReport') 。
var data = sheet1.getDataRange().getValues() 。
var subject = data[1] [6]
//var message = sheet1.getRange(2,9).getValue();
for (i=1; i<data.length; i ) {
if(data[i][5] == ""/span>){
message="Hello"/span> data[i][1] "。這封郵件是為了通知你,你與你的一位教授" data[i][2] ",在你的下一堂課上有一個預約。與你的班主任教授" data[i][3] "報到,然后在你被告知后立即去" data[i][4] " 的房間。 "。
MailApp.sendEmail(data[i][4], subject, message)。
sheet1.getRange((i 1),6).setValue("notified") 。
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/332979.html
標籤:
上一篇:只有在GetOptions(source:Source.server)時才會拋出FirebaseException。

