0

当我收到短信时,我正在使用 IFTTT 更新我的 Google 表格。现在,我想更进一步,编写一个 Google Apps 脚本,它可以对 IFTTT 更新到我的 Google 表格中的数据执行不同的操作。我尝试使用 Google Apps 脚本的onEdit功能来实现相同的目的,但这不起作用。我在多个论坛上就这个问题进行了大量搜索,我了解到onEdit只有当“用户”对 Google 表格进行更改时才有效,而不是通过 API 请求完成更改时(我相信 IFTTT 使用相同) . 我什至看不到一个带有有效解决方案的帖子。

有任何想法吗?谢谢!

4

1 回答 1

1

经过大量的谷歌搜索,我发现下面的代码对我有用。它的灵感来自 Mogsdad 的这个答案

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);
}

希望这对将来的人有所帮助。请注意,必须在 Google Apps 脚本中分别将函数playCatchUp设置myOnEdit为“更改”和“编辑”动作触发器。

于 2018-05-14T09:45:12.810 回答