首页 > 解决方案 > Google 表格:使用脚本自动更新 - 不起作用

问题描述

我创建了一张表,当我家中的空气质量发生变化时,IFTTT 会自动添加一行。那部分工作正常。

我正在尝试实现一个脚本,将时间戳添加到新行,然后另一列计算空气质量保持不变的持续时间。

如果我打开电子表格并手动编辑单元格,则该脚本有效。当 IFTTT 进行更新时,它不起作用。我已经设置了一个触发器,它应该在对工作表进行编辑时运行此脚本。

这是脚本:

function onEdit() {

var s = SpreadsheetApp.getActiveSheet();

if( s.getName() == "MBAP" ) {

var r = s.getActiveCell();

if( r.getColumn() == 1 ) {

var start = r.offset(0, 3);

start.setValue(new Date()).setNumberFormat("MM/DD/YY HH:mm:ss");
}
}
}

谢谢您的帮助!

标签: javascriptgoogle-apps-scriptgoogle-sheetsifttt

解决方案


  • 您已经完成了 IFTTT 端的设置。
    • 它的“Webhooks”为“THIS”。
    • 它是“Google Sheets”的“向电子表格添加行”为“THAT”。
  • 当 IFTTT 附加一行具有 3 列(列“A”、“B”和“C”)的值时,您希望将日期放在附加行的“D”列。
  • 工作表名称为“MBAP”。
  • 您想使用 Google Apps 脚本实现此目的。

问题和解决方法:

不幸的是,在这种情况下,不能使用简单触发器的 OnEdit 事件触发器,因为电子表格是从外部更新的,没有浏览器。所以需要使用其他方法。

当我看到“Google Sheets”的“Add row to spreadsheet”为“THAT”时,我认为这些值可能是由 Sheets API 附加的。所以当我针对这种情况测试OnChange事件触发器时,发现在追加行的时候,触发了事件触发器。参考从这个结果中,发现 IFTTT 的“Google Sheets”使用 Sheets API 将值放入 Google Spreadsheet。

在此答案中,您的目标是通过使用 OnChange 事件触发器执行的脚本来实现的。

用法:

1. 准备示例脚本。

这种情况的示例脚本如下。请将以下脚本复制并粘贴到来自 IFTTT 的电子表格的容器绑定脚本中。

function onChange(e) {
  const sheet = e.source.getSheetByName("MBAP");
  sheet.getRange(sheet.getLastRow(), 4)
    .setValue(new Date())
    .setNumberFormat("MM/DD/YY HH:mm:ss");
}

2. 安装 OnChange 事件触发器。

请将 OnChange 事件触发器安装到onChange. 这样,当将值放入电子表格时,onChange由 OnChange 事件触发器运行。

3. 测试示例脚本。

为了测试示例脚本,请向 IFTTT 的 webhook 请求。通过这种方式,时间戳new Date()被放置到 IFTTT 放置的附加行的最后一列。

笔记:

  • 在此示例脚本中,假设您的 IFTTT 小程序设置为“Webhook”到“THIS”,“Google Sheets”的“Add row to spreadsheet”设置为“THAT”。

参考:


推荐阅读