有人可以帮我弄清楚为什么这不起作用吗? 我有一个类似的脚本(工作正常),它发送一封电子邮件,然后更新某一列中的最新行,以阻止它再次发送电子邮件。我拿了那段脚本并将其实现到下面的脚本中。但是,它似乎没有起作用......
脚本的核心工作原理(当用户使用表单时,它会更新工作表并根据名称作为工作表名称的模板创建新工作表,然后执行importrange以将其数据添加到其中(URL通过表格检索。
我需要这个来处理最新的行,所以它为每个新的表单提交创建一个。我从中获取的脚本工作正常,并包含在底部。
非工作脚本
// This constant is written in column E for rows for which importrange
// has been completed.
var IMPORTED = "IMPORTED";
function onSubmit(e){
var spreadsheet = SpreadsheetApp.openById("1UDAb8ATDChnVbi_2jktsoAfumrq0Tj8gO8xotYgb6JA") // <- Taken from other script
var sheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]); // <- Taken from other script
var ss = e.source;
var Name = e.values[2];
var templateSheet = ss.getSheetByName('Template');
var sh = ss.getActiveSheet();
var row = sh.getActiveRange().getRowIndex();
var col = sh.getActiveRange().getColumnIndex();
var activeRange = sh.getActiveRange().getA1Notation();
var startRow = 1; // First row of data to process
var data = sheet.getDataRange().getValues();
for(var i=startRow; i<data.length; i++) { // <- Taken from other script
var row = data[i]; // <- Taken from other script
var Training_URL = row[3]; // <- Taken from other script
var newSheet = ss.insertSheet(1, {template: templateSheet});
var imported = row[4] // <- Taken from other script
if (imported != IMPORTED) { // <- Taken from other script
newSheet.setName(Name);
newSheet.showSheet();
newSheet.setValue('=importrange("' + Training_URL + ',"Training!A1:I24"');
sheet.getRange(startRow + i, 5).setvalue(IMPORTED); // <- Taken from other script
ss.getRange
SpreadsheetApp.flush(); // <- Taken from other script
}
}
}
原始剧本
var EMAIL_SENT = "EMAIL_SENT";
function sendEmails2() {
var spreadsheet = SpreadsheetApp.openById("1wHojHaB8Q3g06Hc_FnsqzRTY7KAma1QEbkb4InPF2wQ");
var sheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);
var startRow = 1; // First row of data to process
var data = sheet.getDataRange().getValues();
for(var i=startRow; i<data.length; i++) {
var row = data[i];
var emailAddress = row[1];
var SNOW_URL = row[4];
var message = "<HTML><BODY>"
+ "</HTML></BODY>";
var emailSent = row[5];
if (emailSent != EMAIL_SENT) { // This part prevents sending duplicates
var subject = "Your ServiceNow edit request";
MailApp.sendEmail(emailAddress, subject, "", {htmlBody: message});
sheet.getRange(startRow + i, 6).setValue(EMAIL_SENT);
SpreadsheetApp.flush();
}
}
}
答案 0 :(得分:0)
最终管理自己到达那里。 在花了一个下午重新阅读应用程序后,运行起来更加整洁和安全。感谢大家的帮助。
function onSubmit(form) {
console.log({message: 'Form submited', form: form});
var masterSS = SpreadsheetApp.getActiveSpreadsheet();
var templateSheet = masterSS.getSheetByName('Template');
var responseSheet = masterSS.getSheetByName('Responses');
var range = form.range;
console.log(range.getRow());
var newSheet = masterSS.insertSheet(1, {template: templateSheet});
var userName = form.namedValues['Email address'][0].split('@')[0];
newSheet.setName(userName.split('.')[0] + ' ' + userName.split('.')[1]);
newSheet.getRange(1, 1).setValue('=importrange("' + form.namedValues['URL of your sheet'][0] + '" ,"Training!A1:I24")');
responseSheet.getRange(range.getRow(), 5).setValue('IMPORTED');
console.log('***** All done ******');
}