我相對較新的編程,並且最近一直在研究腳本從谷歌電子表格發送電子郵件時,某個列中的單元格被更改。收件人是根據與該更改相同行中另一列中的電子郵件地址分配的。我很難讓我的代碼在第一封電子郵件後停止運行。事實上,腳本無限期運行(至少在我用完電子郵件之前)。谷歌腳本電子郵件循環
下面是代碼:
function sendNotification() {
var sheet = SpreadsheetApp.getActiveSheet();
//Get Active cell
var mycell = sheet.getActiveSelection();
var cellcol = mycell.getColumn();
var cellrow = mycell.getRow();
var address = sheet.getRange("C" + cellrow).getValue();
var streetAddress = sheet.getRange("F" + cellrow).getValue();
var startRow = 2;
var numRows = 2000;
// Fetch the range of cells A2:O2000
var dataRange = sheet.getRange(startRow, 1, numRows, 15)
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (i in data) {
var row = data[i];
var emailAddress = address; // First column
var message = streetAddress +" Has been Submitted for permitting!"; // Second column
var subject = "The above Address has been Submitted For Permitting! We will Follow up with you when it has been approved.";
//Check to see if column is H to trigger
if (cellcol == 8 && sheet.getName() == "Sheet1" && mycell !== "")
{
//Send the Email
MailApp.sendEmail(emailAddress, message, subject);
}
//End sendNotification
}
}
我能做些什麼來解決這個問題?循環是最好的選擇嗎?我將如何實現這一點?
這種方法如何?
var EMAIL_SENT =「EMAIL_SENT」;
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var mycell = e.range;
var cellcol = mycell.getColumn();
var cellrow = mycell.getRow();
var emailAddress = sheet.getRange("C" + cellrow).getValue();
var streetAddress = sheet.getRange("F" + cellrow).getValue();
var subject = "The above Address has been Submitted For Permitting! We will follow up with you when it has been approved."
// Fetch values for each row in the Range
var message = streetAddress +" Has been Submitted for permitting!";
var emailSent = sheet.getRange("O" + cellrow).getValue();
if (cellcol == 8 && sheet.getName() == "Sheet1" && emailSent != EMAIL_SENT) { // Prevents sending duplicates
MailApp.sendEmail(emailAddress, subject, message);
sheet.getRange(cellrow, 15).setValue(EMAIL_SENT);
// Make sure the cell is updated right away in case the script is interrupted
SpreadsheetApp.flush();
}
}
您的循環運行2000次,因爲您正在讀取2000行。 **行22 **上的IF控制應檢查當前行和列8(H)上的值不爲空'row [8]!=「」'。相反,您正在檢查'mycell!=「」'引用循環外的單元格。另外'cellcol == 8'似乎不是必需的。 – Fredster
問題是,如果編輯的單元格在第8列,我只想發送電子郵件。我想我正在接近這一切都是錯誤的。這看起來更好嗎? – AFliss