2016-07-26 90 views
0

我有一个Google表单,我希望在一列大于另一列时生成电子邮件警报。具体来说,列F>栏G.这是我到目前为止,任何意见将不胜感激,因为我没有太多的技能写作功能。Google脚本根据Google表格中的单元格发送条件电子邮件

function readCell() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Watch list"); 
    var value = sheet.getRange("F2").getValue(); 
    var value1 = sheet.getRange("G2").getValue(); 
    if(value>value1) MailApp.sendEmail('[email protected]', 'subject',  'message'); 
}; 

当前这只是试图比较单元格F2和单元格G2。有没有办法让函数比较整个F列与G列,并为Fx> Gx的每个个案生成一封电子邮件?

谢谢!

回答

1

你必须在整个范围内循环。
第一而不是让一个单元格的内容,你需要把所有的列的内容:

var value = sheet.getRange("F2").getValue(); 

成为

var values = sheet.getRange("F2:F").getValues(); 

(同为值1)
那么你需要创建一个空表,将收集结果:

var results = []; 

现在你需要循环通过所有值:

for(var i=0;i<values.length;i++){ 
//do the comparaison and store result if greater for example 
} 

然后您可以发送结果。 都放在一起给它这样的事情:

function readCell() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Watch list"); 
    var values = sheet.getRange("F2:F").getValues(); 
    var value1s = sheet.getRange("G2:G").getValues(); 
    var results = []; 
    for(var i=0;i<values.length;i++){ 
     if(values[i]<value1s[i]){ 
     results.push("alert on line: "+(i+2)); // +2 because the loop start at zero and first line is the second one (F2) 
     } 
    } 
    MailApp.sendEmail('[email protected]', 'subject',  results.join("\n")); 
}; 

如果要触发功能可自动您还需要改变你调用电子表格(而不是getActive方式....你需要使用openById)

+0

这绝对是正确的轨道! if(values [i] value1s [i]){因为我们希望F> G的值正确吗? 虽然结果有点奇怪。我编辑了列值,以便它们都应该触发警报,但只有一些是。更奇怪的是,当我将所有的F列值设置为300时,我得到的警报不同于所有F列值设置为200时的警报。任何想法@Harold? –

相关问题