我有一张Google表格,该表格由在AppSheet上创建的移动应用程序更新。 我有一列数据,我需要保留历史记录,所以编写了一个脚本,将列复制到另一张表中的fblank列。
function readdailyChecks() {
var sheetFrom = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Todays Checks");
var sheetTo = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("History");
// Copy from 5th column, all rows for one column
var valuesToCopy = sheetFrom.getRange("D2:D100").getValues()
//Paste to another sheet from first cell onwards
sheetTo.getRange(1,sheetTo.getLastColumn()+1,valuesToCopy.length,1).setValues(valuesToCopy);
}
然后我在编辑工作表时编写了另一个脚本来执行此任务,以为同步会编辑工作表数据。
function onEdit(e) {
if(e);
readdailyChecks(e)
}
这个想法是应用程序会在表单完成后同步,更新工作表并触发onEdit
代码来执行此操作。
问题是同步会更改工作表数据而不进行编辑,因此不会创建历史数据!
是否有onSync
代码或方式,当数据发生变化时,可以触发脚本?
答案 0 :(得分:0)
official documentation描述了可用的触发器。当用户执行操作时,将触发编辑,打开,更改,表单提交。
另一种方法是让您的应用调用您的Google Apps脚本功能。一种方法是使用google.script.run (Client-side API)
答案 1 :(得分:0)
我在AppSheet工作。通过Google表格后端API对Google表格进行更新时,他们不会触发onEdit触发器。我不确定为什么会这样,但这是Google强加的限制。这就是你所观察到的。
AppSheet文档建议您尝试定时触发器,轮询更改。 https://appsheethelp.zendesk.com/hc/en-us/articles/206483017-Google-Drive
不是最好的,但确实有效。一些AppSheet用户使用onChange触发器而不是onEdit触发器报告成功。对我来说,这违背了onChange触发器上记录的含义的逻辑,但它似乎适用于这些用户,所以值得一试。