Javascript 如何在按下tab按钮或";时自动发送电子邮件;指定的;值作为状态列中的输入提供

Javascript 如何在按下tab按钮或";时自动发送电子邮件;指定的;值作为状态列中的输入提供,javascript,google-apps-script,google-sheets,excel-formula,google-sheets-formula,Javascript,Google Apps Script,Google Sheets,Excel Formula,Google Sheets Formula,我在google sheets上开发了这个平台,如果状态栏中的“Status”列设置为“Assigned”,我必须创建一个宏,用于向相应的人发送电子邮件Id 我已经开发了一个代码来拉出宏函数 Name |DateTask|Priority|Description| Email |Email Notify|Status Baishnav |01/05/20|High |devlopment|dasr@gmail.com| Yes | Assigned

我在google sheets上开发了这个平台,如果状态栏中的“Status”列设置为“Assigned”,我必须创建一个宏,用于向相应的人发送电子邮件Id

我已经开发了一个代码来拉出宏函数

  Name   |DateTask|Priority|Description|    Email    |Email Notify|Status 

Baishnav |01/05/20|High    |devlopment|dasr@gmail.com|   Yes      | Assigned

我不确定你到底有什么问题。我为你重新设计了一个新的功能。 不要忘记将我的代码Sheet1中的工作表名称更改为所需的名称

试试这个:

/** @OnlyCurrentDoc */

function macros() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('G12').activate();
  var startRow = 2;
  var numRows =20;
  var count = 2;
  
  var dataRange = spreadsheet.getRange(startRow, 1, numRows, 7)
  var data = dataRange.getValues();
  for (i in data) {
    var row = data[i];
    var name = row[0];
    var dateOfAssignment = row[1];
    var taskP = row[2];
    var td = row[3];
    var ts = row[6];
    var email = row[4];
    var isSent = row[5];
     
    
    if( ts == "Assigned"  && isSent != "Yes"){
      var message = "Hey" + row[0] + "\n Your assigned task on :"+ dateOfAssignment +"\n Task description " + td + "\n Regards Baishnav";
      var subject = "Sending emails from Spreadsheet";
      MailApp.sendEmail(email, subject,message);
      var cellstring = "G" + count;
      var tosetFlag = sheet.getRange(cellstring).setValue("Yes");
    }
    count++;
  }
};
函数sendmail(){ var ss=SpreadsheetApp.getActive(); var sh=ss.getSheetByName(“Sheet1”); var sh_s=sh.getLastRow(); var Name=sh.getRange('A2:A'+sh_.s).getValues().flat([1]); var DateTask=sh.getRange('B2:B'+sh_.s).getValues().flat([1]); var Priority=sh.getRange('C2:C'+sh_s).getValues().flat([1]); var Description=sh.getRange('D2:D'+sh_s).getValues().flat([1]); var Email=sh.getRange('E2:E'+sh_s).getValues().flat([1]); var isSent=sh.getRange('F2:F'+sh_.s).getValues().flat([1]); var Status=sh.getRange('G2:G'+sh_s).getValues().flat([1]); 对于(变量i=0;i你想过使用触发器吗?不,我几乎不知道宏,这就是为什么你要继续使用它?@adityavibhav有效吗?如果是,请点击答案左侧的勾选按钮接受我的答案。谢谢。@MariosKaramanis如果不是最后一排被改变怎么办?我认为OP可以使用
onEdit(e)
触发器的帮助,然后使用相应的逻辑将sendEmail调整为sendEmail(e),以捕捉刚刚更改的行。@Aerials肯定可以进行改进。OP提供的脚本(他没有解释什么有效,什么无效)基于静态数据逻辑。我可以基于onEdit函数为他重建一个新项目,但这不是stackoverflow。他应该首先朝着这个方向努力。如果我错了,请纠正我。你是对的,我想向你提及这一点,以补充你的答案,因为你已经着手“完全重新设计了一些有效的东西”。事实上,这是真的,不幸的是,我现在没有时间去做。请随意使用我的代码并提供onEdit解决方案,我会立即投票支持:)我相信OP也会从中受益。
function sendEmail() {

 var ss = SpreadsheetApp.getActive();
 var sh = ss.getSheetByName("Sheet1");
 var sh_s = sh.getLastRow();
  
 var Name = sh.getRange('A2:A'+sh_s).getValues().flat([1]);
 var DateTask = sh.getRange('B2:B'+sh_s).getValues().flat([1]);
 var Priority = sh.getRange('C2:C'+sh_s).getValues().flat([1]);
 var Description = sh.getRange('D2:D'+sh_s).getValues().flat([1]); 
 var Email = sh.getRange('E2:E'+sh_s).getValues().flat([1]); 
 var isSent = sh.getRange('F2:F'+sh_s).getValues().flat([1]);  
 var Status = sh.getRange('G2:G'+sh_s).getValues().flat([1]);     
   
  for ( var i=0 ; i < Name.length ; i++){
  
    if (Status[i]=='Assigned' && isSent[i] != "Yes"){
    
    var message = "Hey" + Name[i] + "\n Your assigned task on :"+ DateTask[i] +"\n Task description " + Description[i] + "\n Regards Baishnav";
    var subject = "Sending emails from Spreadsheet";
    MailApp.sendEmail(Email[i], subject, message);
      
    sh.getRange(i+2,6).setValue('Yes');  
    }   
  }
}