Javascript 谷歌根据单元格值发送电子邮件一次

Javascript 谷歌根据单元格值发送电子邮件一次,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,此脚本正常工作,除了发送多封电子邮件外,此脚本检查F列中是否有任何大于0的值,然后发送一封电子邮件。F列是我手动输入数据的位置。尝试让它只发送一封电子邮件,并在H列中放置一封“已发送电子邮件”。然后检查H列是否已发送电子邮件。如果是,请不要再次发送电子邮件 函数sendEmails(){ var sSheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“表单响应”);//获取表单“表单响应” var data=sSheet.ge

此脚本正常工作,除了发送多封电子邮件外,此脚本检查F列中是否有任何大于0的值,然后发送一封电子邮件。F列是我手动输入数据的位置。尝试让它只发送一封电子邮件,并在H列中放置一封“已发送电子邮件”。然后检查H列是否已发送电子邮件。如果是,请不要再次发送电子邮件

函数sendEmails(){ var sSheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“表单响应”);//获取表单“表单响应” var data=sSheet.getRange(2,1,sSheet.getLastRow(),sSheet.getLastColumn()).getValues();//获取表的值,不带标题 var lastRow=sSheet.getLastRow();//获取输入数据的最后一行 var yourColumn=“H”;//设置您的列 var yourFunction=(“Email Sent”);//不管你想要什么函数、公式或数据,只要别忘了使用lastRow做行号 sSheet.getRange(yourColumn+lastRow).setValue(yourFunction); 对于选项卡中的每个元素(var i=0;i0){//如果该人员至少有1份未完成的报告(第E列) var body=“你好”+行[0]+“您有”+行[5]+“未完成的内部审计报告。”; GmailApp.sendmail(第[1]行,“未完成的内部审计报告”,正文);//向警报发送邮件 } } } 试试这个:

function sendEmailsToTechs() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName("Form Responses");
  //var sh=ss.getActiveSheet();
  var rg=sh.getDataRange();
  var data=rg.getValues();
  var hRange=sh.getRange(2,8,sh.getLastRow(),1);
  var hValues=hRange.getValues();
  for (var i=1;i<data.length;i++){
    var row = data[i];
    if(row[5] && row[7]!='Email Sent') {
      var body = "Good day "+ row[0] + " you have " + row[5] + " Internal Audit reports outstanding.";
      GmailApp.sendEmail(row[1],"Outstanding Internal Audit Reports", body); 
      //Logger.log(body);
      hValues[i-1][0]='Email Sent';  
    }
  }
  hRange.setValues(hValues);//Puts the values into the spreadsheet all at one time. 
}
函数sendmailstotechs(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName(“表单响应”);
//var sh=ss.getActiveSheet();
var rg=sh.getDataRange();
var data=rg.getValues();
var hRange=sh.getRange(2,8,sh.getLastRow(),1);
var hValues=hRange.getValues();

对于(var i=1;iDidn Not work仍会向每个人发送电子邮件,其中F列中有一个值,并显示一个错误“无法将数组转换为对象[][](第14行,文件“技术电子邮件副本”)驳回”我做了一些更改并根据自己的喜好对其进行了重新组织。我对其进行了测试,它可以正常工作。如果您访问live form响应,您可能希望使用它。注意:它将在第一时间发送您的所有电子邮件,直到用“已发送电子邮件”更新第8列。
function sendEmailsToTechs() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName("Form Responses");
  //var sh=ss.getActiveSheet();
  var rg=sh.getDataRange();
  var data=rg.getValues();
  var hRange=sh.getRange(2,8,sh.getLastRow(),1);
  var hValues=hRange.getValues();
  for (var i=1;i<data.length;i++){
    var row = data[i];
    if(row[5] && row[7]!='Email Sent') {
      var body = "Good day "+ row[0] + " you have " + row[5] + " Internal Audit reports outstanding.";
      GmailApp.sendEmail(row[1],"Outstanding Internal Audit Reports", body); 
      //Logger.log(body);
      hValues[i-1][0]='Email Sent';  
    }
  }
  hRange.setValues(hValues);//Puts the values into the spreadsheet all at one time. 
}