比较谷歌电子表格中的2列,如果值不匹配,请使用谷歌脚本发送邮件

时间:2017-11-16 09:14:54

标签: google-apps-script google-sheets

我正在为Google工作表的列中的费率列表创建身份验证模块。 我在c栏中有一个原始费率(oRate)列表。我在b栏中有实际售价。每个销售率(sRate)记录在b栏中。脚本应该将b列中的销售率与c列中的原始费率列表进行比较,如果任何值不相等,它应该在d列中记录,“相等”或“不相等”,我应该收到一条警报邮件,对于每个“不相等”的条目,提及产品名称与费率不匹配。 (名称用colA写成)。我写过部分剧本,但不满意。

数据格式

      A       B       C         D        E     F    ...
1    name   oRate   sRate  is equal?
2    item1   10       10     equal   
3    item2   30       28     not equal 
.
n

A部分 - 跟踪变更

function trackChange() {
 var s = SpreadsheetApp.getActiveSheet();
 if( s.getName() == "Auth" ) { //checks that we're on the correct sheet
   var orate = s.getActiveCell();
   if( orate.getColumn() == 2 ) { //checks the column
     var srate = r.offset(0, 1);
     if( srate.getValue() != orate.getValue() ) //is it equal?
       var auth = 'not equal';
       var authCell = srate.offset(0,1);
       authCell.setValue(auth);
   };
 };
}

使用时间限制触发器设置。但它永远不会编辑表格。

B部分 - 发送邮件

function sendMail() {
  if (SpreadsheetApp.getActive().getSheetByName('Auth').getRange('E2:E676').getValue()== 'not equal') return;
  MailApp.sendEmail("abc@xyz.com", "URGENT: AUTHORIZE CHANGE OF sale price", "mail body", {
        name: "abc"
    });

即使所有单元格相同,它也会每分钟发送一封邮件。我无法弄清楚如何从colA添加产品名称。 请帮助!

1 个答案:

答案 0 :(得分:0)

尝试使用此代码:

function checkEqual(){

  var source = SpreadsheetApp.openById("fileID")
  var sheet  = source.getSheetByName("Sheet2");
  var data   = sheet.getDataRange().getValues();
  for (var i=1; i<data.length; i++){
    //first column will be empty for results
    var first = data[i][1];
    var second = data[i][2];

    Logger.log(first + " " +second)

    if(first == second){

      var cell = sheet.getRange(i+1,4);
      cell.setValue("equal")
      //emailOwner();
      var cell2 = sheet.getRange(i+1,5);
      cell2.setValue("emailed")
    }
    else{

    }
  }

}

function emailOwner(){
//email code

}

这可以帮助您检查列是否相等,如果不相同则发送电子邮件。

希望这有帮助。