检查最后一行状态= X.

时间:2018-02-05 11:45:31

标签: google-apps-script google-sheets

有人可以帮我弄清楚为什么这不起作用吗? 我有一个类似的脚本(工作正常),它发送一封电子邮件,然后更新某一列中的最新行,以阻止它再次发送电子邮件。我拿了那段脚本并将其实现到下面的脚本中。但是,它似乎没有起作用......

脚本的核心工作原理(当用户使用表单时,它会更新工作表并根据名称作为工作表名称的模板创建新工作表,然后执行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();    
    }
  }
}

1 个答案:

答案 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 ******');
}