javascript - 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");
}
}
}
谢谢您的帮助!
解决方案
- 您已经完成了 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”。
参考:
推荐阅读
- python - Python scrapy 从表格列表中获取详细信息
- jquery - Nothing is firing on SELECT change
- excel - 使用 Excel VBA 将表格数据插入列表框
- python - 编解码器无法编码字符python3
- c - 无法正确打印快速排序排列的矩阵
- android - 键盘里面的安卓键盘
- r - find max column value in r conditional on another column
- arduino - 将对象写入和读取到 esp32 闪存,arduino
- c# - 一旦我将脚本应用到场景编辑器中的游戏对象,我的函数就会运行。我需要它只在运行时影响对象
- python - 将 .isin 应用于熊猫中每一行的有效方法