电子表格上的电子邮件警报脚本

时间:2019-12-04 11:37:42

标签: google-apps-script google-sheets

当特定单元格达到所需的文本值时,我正在尝试在电子表格中设置电子邮件警报/通知。
我不太习惯JS,但是我可以使用现有代码进行基本更改。

这是我需要使用的示例表:

enter image description here

基本上,我需要脚本首先运行B列中的单元格值,然后再遍历C列,依此类推,并查找所有值为“ Fail”的单元格。
对于这些单元格,我想发送一封包含自定义文本的电子邮件到特定的电子邮件地址。
如果可能的话,我想为每列提供一封电子邮件,并且该列中的所有单元格均为“失败”。

我尝试了一些代码,但是没有用,这是我尝试在网站上提供一些帮助的代码,但是它没有正确的单元格,因此我一定犯了一些错误:

function myFunction() {
  var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
  for(n=1;n<values.length;++n){
    var cellValue = values[n][2];
    var trigger = cellValue = 'Fail';
    if (trigger) {
        //MailApp.sendEmail(values[n][1], subject, message);
        Logger.log('send mail to ' + values[n][10]);
    }
  }
}


如果有人可以帮助我,我会非常感激:)

提前谢谢

更新

ziganotschka 下面建议的代码可以正常工作。

正如我在评论部分所问的,是否可以将getValues或getA1Notation中的值放入2D数组中? 我基本上想重新创建源表的相同结构,然后将数组转换成HTML表(这是我可以做的)并将其插入Alert电子邮件中;结果就是得到这样的结果(假设您看到的值是QC为“失败”的值):

Array Item1

Array Item2

1 个答案:

答案 0 :(得分:1)

您可以按以下方式修改代码:

function myFunction() {
  var range = SpreadsheetApp.getActiveSheet().getDataRange();
  var values = range.getValues();
  var allFails = '';
  var trigger = false;
  for(a=1;a<values[0].length;a++){
    for(n=0;n<values.length;n++){
      var cellValue = values[n][a];////
      if(cellValue == 'Fail'){
        trigger  = true;
        allFails+=range.getCell(n+1, a+1).getA1Notation()+',';
      }
    }
    if (trigger) {
      //MailApp.sendEmail( allFails, subject, message);
      Logger.log('cells with Fail: ' + allFails);
    }
    trigger=false;
    allFails = '';
  }
}

基本上

  • 您创建一个嵌套的for循环以遍历所有行和列(从B开始)
  • 对于每列,是否检测到值“ Failed”,相应列的电子邮件触发器将设置为true,并且此列中包含值“ Fail”的所有单元格的A1表示法将添加到字符串

希望对您有所帮助!

更新:

要按照第二个问题的要求创建数组,可以按以下方式修改代码:

function myFunction2() {
  var range = SpreadsheetApp.getActiveSheet().getDataRange();
  var values = range.getValues();
  //var allFails = '';
  var trigger = false;
  for(var a=1;a<values[0].length;a++){
    eval('var ' + 'array'+a + '= [];')
    eval('array'+a+'[0]=[];')
    eval('array'+a+'[1]=[];')
    for(var n=0;n<values.length;n++){
      var cellValue = values[n][a];////
      if(cellValue == 'Fail'){
        trigger  = true;
        eval('array'+a+'[0].push("'+values[n][0]+'");')
        eval('array'+a+'[1].push("'+cellValue+'");')
      }
    } 
    if (trigger) {
      //MailApp.sendEmail( allFails, subject, message);
      Logger.log(eval('array'+a));
    }
    trigger=false;
    allFails = '';
  }
}
  

Eval是一个Javascript函数,可让您创建动态   变量名称。