Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 一旦数据输入到空白列中,Google Sheets将使用选定单元格发送电子邮件_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 一旦数据输入到空白列中,Google Sheets将使用选定单元格发送电子邮件

Google apps script 一旦数据输入到空白列中,Google Sheets将使用选定单元格发送电子邮件,google-apps-script,google-sheets,Google Apps Script,Google Sheets,试图创建一个Google Sheets脚本,一旦在一个空列(M列)中输入一个值,就应该发送一封电子邮件(电子邮件地址可以硬编码),其中包含电子邮件中E3、F3、H3、I3、J3、K3、L3、M3、N3、O3的单元格值 每次在M列中输入数据时,都应运行此脚本 function sendEmail() { // return all data in active spreadsheet var values = SpreadsheetApp.get

试图创建一个Google Sheets脚本,一旦在一个空列(M列)中输入一个值,就应该发送一封电子邮件(电子邮件地址可以硬编码),其中包含电子邮件中E3、F3、H3、I3、J3、K3、L3、M3、N3、O3的单元格值

每次在M列中输入数据时,都应运行此脚本

function sendEmail() { 
        // return all data in active spreadsheet
        var values = 
        SpreadsheetApp.getActiveSheet().getDataRange().getValues()
        for (i in values.length) { 
           //iterate over each row
              var data= values[i][14];
              var emailAddress = "someGuy@gmail.com";
              var subject = "Marshal's Notice detected" 
              var message = values[i][E3] [F3] [H3] [I3] [J3] [K3] [L3] [M3] 
                  [N3] [O3];
            // if data cell is greater than one, send an email for this row
               if (data > 1) ;{
                    MailApp.sendEmail(emailAddress, subject, message);
                   }
                 }
       }

使用
values[i][E3]
将不起作用-您需要传递整数才能获得在数据数组中查找的值。我对您的脚本做了一些更改,并在下面进行了解释

function sendEmail() { 
  // return all data in active spreadsheet
  var sheet = SpreadsheetApp.getActiveSheet();
  var values = sheet.getDataRange().getValues();
  for (var i = 0; i < values.length; i++) { 
    //iterate over each row
    var data = values[i][12];
    var emailAddress = "email@address.com";
    var subject = "Marshal's Notice detected" 
    var message = values[2][4] + values[2][5] + values[2][7]    //e3, f3 & h3
                + values[2][8] + values[2][9] + values[2][10]   //i3, j3 & k3
                + values[2][11] + values[2][12] + values[2][13] //l3, m3 & n3
                + values[2][14];                                //o3
    // if data cell is greater than one, send an email for this row
    if (data > 1 && values[i][15] == '') {
      MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(i+1, 16).setValue('email sent!');
    }
  }
}
然后,当您尝试访问E3等时,我已经给出了正确的整数来访问您正在查找的特定单元格,例如
值[2][4]
,因为它们是0索引的,这将为您提供第3行第5列=E3的单元格

为了阻止此脚本发送多个相同的电子邮件,我添加了一行,将p列的值设置为“email Sent”,然后在
if
语句中添加一个复选框,以确保该行尚未发送

if (data > 1 && values[i][15] == '') {
  MailApp.sendEmail(emailAddress, subject, message);
  sheet.getRange(i+1, 16).setValue('Email Sent');
}
附加注释后编辑:

我已经整理了以下代码,这些代码应该与您的所有新标准相匹配

function onEdit(e) { 
  // return all data in active spreadsheet
  var sheet = SpreadsheetApp.getActiveSheet();
  var values = sheet.getDataRange().getValues();
  for (var i = 0; i < values.length; i++) { 
    //iterate over each row
    var editCol = e.range.getColumn();
    var emailAddress = "email@address.com";
    var subject = "Marshal's Notice detected" 
    var message = values[i][4] + values[i][5] + values[i][7]    //e3, f3 & h3
                + values[i][8] + values[i][9] + values[i][10]   //i3, j3 & k3
                + values[i][11] + values[i][12] + values[i][13] //l3, m3 & n3
                + values[i][14];                                //o3
    // if data cell is greater than one, send an email for this row
    if (values[i][13] !== '' && editCol === 13 && values[i][15] === '') {
      MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(i+1, 16).setValue('email sent!');
    }
  }
}
函数onEdit(e){
//返回活动电子表格中的所有数据
var sheet=SpreadsheetApp.getActiveSheet();
var values=sheet.getDataRange().getValues();
对于(var i=0;i
  • 代码现在会检查数据添加到的列。为了实现这一点,我必须将其放入
    onEdit
    触发器中,然后使用事件对象获取输入数据的列,然后在我的
    if
    语句中对此进行检查
  • 代码专门为数据抓取第3行,现在已更改为使用i,它将为正在处理的行抓取数据
  • 我还在
    if
    语句中添加了一个检查,以确保N列已填充,这将避免在数据尚未计算时发送任何电子邮件

  • 你能澄清你的问题吗?谢谢你的帮助。您提供的代码实际上会发送电子邮件。但我还希望你能帮我做另外三件事……(1)无论数据输入到哪一列,电子邮件都会被发送。->其目的是,对M列中任何单元格所做的任何更改都将作为sendMail脚本(2)的触发器。当发送电子邮件时,无论哪一行输入数据,它都会发送第1行中相同的数据。它正在拉取正确的列,而不是正确的行。例如,如果用户在第232行第M列输入日期,则发送的数据应来自第232行和第[4]、[5]、[7]、[8]、[9]、[10]、[11]、[12]、[13]、[14](3)列(N列)数据之一是基于用户输入第M列的数据的=WORKDAY()函数的结果。有没有办法延迟脚本本身的运行,直到coln有时间更新。由于现在进行了编码,数据是在WORKDAY()函数有时间操作列中的数据之前发送的。提供的代码回答了您提出的问题-所有这些都没有在问题中指定,这就是为什么我的答案中没有指定。将来,你应该在你的问题中包含你想要脚本做的所有事情。使回答问题的人不必重新编写代码以满足新的要求。无论如何,我已经在上面的代码中添加了新的需求。。。TypeError:无法从引用此行代码的未定义中读取属性“range”…var editCol=e.range.getColumn();当我调试代码时,我收到以下消息…({onEdit:function onEdit(e){var sheet=SpreadsheetApp.getActiveSheet();var values=sheet.getDataRange().getValues();for(var I=0;Ifunction onEdit(e) { // return all data in active spreadsheet var sheet = SpreadsheetApp.getActiveSheet(); var values = sheet.getDataRange().getValues(); for (var i = 0; i < values.length; i++) { //iterate over each row var editCol = e.range.getColumn(); var emailAddress = "email@address.com"; var subject = "Marshal's Notice detected" var message = values[i][4] + values[i][5] + values[i][7] //e3, f3 & h3 + values[i][8] + values[i][9] + values[i][10] //i3, j3 & k3 + values[i][11] + values[i][12] + values[i][13] //l3, m3 & n3 + values[i][14]; //o3 // if data cell is greater than one, send an email for this row if (values[i][13] !== '' && editCol === 13 && values[i][15] === '') { MailApp.sendEmail(emailAddress, subject, message); sheet.getRange(i+1, 16).setValue('email sent!'); } } }