【问题标题】:Use Google Sheet Formula in Script在脚本中使用 Google Sheet 公式
【发布时间】:2015-05-28 02:50:45
【问题描述】:

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

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

表格“状态”的单元格“D2”中的公式:

=IF((COUNTIF(INDEX(data!A1:D5032,(SUMPRODUCT(MAX((data!A:A="meloc")*(ROW(data!A:A))))),4) ,"输入")+COUNTIF(INDEX(data!A1:D5032,(SUMPRODUCT(MAX((data!A:A="youloc")*(ROW(data!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);
    }
  }
}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    您发现的内容无法解决。目前,当外部代码使用电子表格或驱动 api 更改内容时,不会调用这些触发器。

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

    如果它改变了,再次处理整个工作表。

    【讨论】:

    • 感谢您的回复。是否像每分钟触发一次脚本一样简单,还是我需要添加其他代码?我不知道的一部分是公式是否在每次 api 更改后重新计算。
    • 试一试。不确定该公式是否会立即重新计算。
    • 将脚本设置为每分钟触发一次效果很好。无需其他更改。谢谢!
    猜你喜欢
    • 2020-11-17
    • 1970-01-01
    • 2022-01-24
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多