在脚本中使用Google Sheet Formula

时间:2015-05-28 02:50:45

标签: google-apps-script google-sheets

每次将新条目添加到我的Google工作表后,我需要让脚本验证单元格的组合,然后确保在发送电子邮件之前验证的输出已更改。我知道如何使用电子表格中的公式进行验证并提供正确的输出,我知道如何让脚本检查该字段并运行。当有人从UI编辑工作表时,这种方法有效。问题是电子表格没有通过UI更新(它是通过IFTTT配方完成的),所以我认为验证字段在脚本运行之前不会重新计算,这意味着没有发送电子邮件。

以下公式和脚本在通过UI更新时非常有效。我的问题是 - 有没有办法用电子表格中的公式从下面的脚本中计算“值”变量?

在Sheet“state”的单元格“D2”中的公式:

= IF((COUNTIF(INDEX(数据A1:D5032,(SUMPRODUCT(MAX((数据A:!A = “meloc”)*(ROW(数据A:A))))),4) , “输入”)+ COUNTIF(INDEX(数据A1:D5032,(SUMPRODUCT(MAX((数据A:!A = “youloc”)*(ROW(数据A:A)) ))),4), “输入”))> 0,9999999999999,1111111111111)

通过UI编辑工作表时,使用onEdit触发器工作正常的脚本:

function myNotification() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var value = ss.getSheetByName("state").getRange("D2").getValue();
  if( value > 0 ) {
    var last = ScriptProperties.getProperty("last");
    value = value.toString();
    if( value != last ) {
      MailApp.sendEmail('trigger@recipe.ifttt.com', 'Status #'+value+'\n\n',
                        '1="not here", 9="here": '+value+'\n\n', {
                        cc: 'myemail@gmail.com'
                        });
      ScriptProperties.setProperty("last", value);
    }
  }
}

1 个答案:

答案 0 :(得分:0)

你找到的东西不能用来工作。当外部代码使用电子表格或驱动api更改内容时,当前不会调用这些触发器。

如果你需要它实时工作,它是不可能的。否则,如果您可以延迟1分钟,则可以使用重复的1分钟触发器来检查电子表格上的最后修改日期是否已更改(通过与先前存储在脚本属性中进行比较)。

如果更改,请再次处理整张纸。