当前位置: 首页 > 知识库问答 >
问题:

当IFTTT更新Google Sheet时设置触发器

狄阳华
2023-03-14

当我收到短信时,我正在使用IFTTT更新我的谷歌表格。现在,我想提前一步,写一个谷歌应用脚本,它可以用IFTTT更新的数据做不同的事情。我试图使用Google Apps Script的onEdit函数来实现同样的功能,但这不起作用。关于这个问题,我在多个论坛上做了很多搜索,我了解到onEdit只有当“用户”对谷歌表格进行更改时才有效,而不是在应用编程接口请求中进行更改时(我相信IFTTT使用相同)。我甚至看不到一个有工作解决方案的帖子。

有什么想法吗?谢谢

共有1个答案

幸阳波
2023-03-14

经过大量的谷歌搜索,我发现下面的代码对我有用。它的灵感来自莫格斯达德的回答。

function myOnEdit(e) {
  if (!e) throw new Error( "Event object required. Test using test_onEdit()" );
  // e.value is only available if a single cell was edited
  if (e.hasOwnProperty("value")) {
    var cells = [[e.value]];
  }
  else {
    cells = e.range.getValues();
  }
  row = cells[cells.length - 1];
  // Do anything with the row data here
}

function test_onEdit() {
  var fakeEvent = {};
  fakeEvent.authMode = ScriptApp.AuthMode.LIMITED;
  fakeEvent.user = "hello@example.com";
  fakeEvent.source = SpreadsheetApp.getActiveSpreadsheet();
  fakeEvent.range = fakeEvent.source.getActiveSheet().getDataRange();
  // e.value is only available if a single cell was edited
  if (fakeEvent.range.getNumRows() === 1 && fakeEvent.range.getNumColumns() === 1) {
    fakeEvent.value = fakeEvent.range.getValue();
  }
  onEdit(fakeEvent);
}

// Installable trigger to handle change or timed events
// Something may or may not have changed, but we won't know exactly what
function playCatchUp(e) {
  // Build a fake event to pass to myOnEdit()
  var fakeEvent = {};
  fakeEvent.source = SpreadsheetApp.getActiveSpreadsheet();
  fakeEvent.range = fakeEvent.source.getActiveSheet().getDataRange();
  myOnEdit(fakeEvent);
}

希望这对将来的人有所帮助。请注意,在谷歌应用程序脚本中,必须将函数playCatchUpmyOnEdit分别设置为“更改”和“编辑”动作触发器。

 类似资料:
  • userNotesTable: 用户提醒表: 插入触发器: 更新触发器: 这是数据库的当前代码,以及提醒表的特定触发器。我遇到的困难是,从提醒表中的specific中的user notes表中选择特定的名称和额外的内容,所有这些都在更新触发器中。 插入时,和会被插入到提醒和搜索表中,但我希望能够使用特定名称和用户注释表中的额外内容更新搜索表,这可能吗?

  • 问题内容: 仅在真正更改数据的情况下,才有可能使用“更新后”触发器。我知道“新旧”。但是使用它们时,我只能比较列。例如“ NEW.count <> OLD.count”。 但我想要类似的东西:如果“ NEW <> OLD”,则运行触发器 一个例子: 关键是,有一个更新,但是 什么都没有改变 。但是无论如何,触发器都在运行。恕我直言,应该有一个没有的方法。 我知道我可以使用 如果现在b <> OLD

  • 问题内容: 我正在尝试为我的表创建一个触发器,该触发器根据某个标志设置为“ Y”的时间自动添加发布日期 我没有创建触发器的丰富经验,但到目前为止,这是我所拥有的 更新列时出现此错误 触发器“ USER.ADD_CREATE_DT”无效且重新验证失败 有任何想法吗? 谢谢 问题答案: 使用WHEN子句: 或使用IF: 在这种情况下,WHEN更合适,更有效。

  • 问题内容: 我有两个叫和的表。我想创建一个触发器,更新列上在每个新的插入表的表。 表客户:customer_id,名称,last_sale,… 表销售额:sale_id,customer_id,日期,… 我已经开始写作,但我不知道该怎么做。 有人可以帮我吗? 问题答案: 然后 是即将在销售表中插入的行。(对于更新行,将取决于该行在更新之后的外观,以及该行在更新之前的外观)。

  • 我在Jenkins中使用“构建用户变量插件”来获取导致触发的用户。这在手动触发时工作正常。当构建过程也由轮询P4触发时,BUILD_USER被设置为SCMTrigger。但是,当定期(时间)触发构建时,BUILD_USER为空。有没有办法设置时间触发时的BUILD_USER env变量?

  • 但是,如果我的Lambda不期望任何输入,它将自己转到SQS并拉出消息,有输入有意义吗?我是否可以让它无效,或者甚至完全使用其他方法签名(当然,在本例中不实现那个接口)?