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

Setting up a trigger when a Google Sheet gets updated by IFTTT

我正在使用 IFTTT 在收到短信时更新我的​​ Google Sheet。现在,我想向前迈出一步,编写一个 Google Apps 脚本,它将对 IFTTT 更新的数据执行不同的操作,并将其写入我的 Google Sheet。我尝试使用 Google Apps 脚本的 onEdit 函数来实现相同的目的,但这不起作用。 关于这个问题,我在多个论坛上进行了大量搜索,我了解到 onEdit 仅在 "user" 对 Google Sheet 进行更改时有效,而不是更改是通过 API 请求完成的(我相信 IFTTT 使用相同的请求)。我什至看不到一个 post 的有效解决方案。

有什么想法吗?谢谢!

经过大量 Google 搜索,我发现下面的代码对我有用。它的灵感来自 Mogsdad 的 this answer

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 函数必须在 Google Apps 脚本中分别设置为 "change" 和 "edit" 操作触发器。