首页 > 解决方案 > 通过 Google App Scripts 创建输入到工作表中的数据的备份

问题描述

我有一个电子表格,用户可以在其中输入数据,然后在单击按钮时执行功能。单击该按钮时,它会记录时间并在该电子表格的另一张工作表上的新行中输入数据。

为了确保该工作表不会被用户意外编辑,我想创建该数据的非共享备份。

我将范围导入另一个电子表格,但仅导入范围意味着如果原始工作表被编辑/擦除,则数据也将被编辑/擦除,因此我编写了以下脚本来记录更改时的变化。

    function onEdit(event){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var incomingSheet = ss.getSheetByName('Incoming');
var lastRow = incomingSheet.getLastRow();
var incomingData = incomingSheet.getRange(lastRow,1,1,7);

var permanentSheet = ss.getSheetByName('PermanentLog')
var newdataRow = permanentSheet.getLastRow();

incomingData.copyTo(permanentSheet.getRange(newdataRow+1,1));
}

这在从 Apps 脚本编辑器运行时有效,但是,当我输入新数据并单击原始电子表格上的按钮时,它会将数据记录到那里的日志表中,并将范围导入到新的“传入”表中电子表格,但数据不会复制到“永久日志”表中(除非我从 Apps 脚本编辑器中手动运行它)。如果我从第一张表中删除 ImportRange 函数,然后在“传入”表中手动输入数据,它也可以工作。

那么这是否意味着来自导入范围的新行不会触发 onEdit?解决方案是什么?我不想在定时触发器上运行它,我想永久捕获每一个新的数据行。

另外,我是否忽略了对整个问题的更优雅和简单的解决方案?

感谢您的时间。

标签: google-apps-scriptgoogle-sheets

解决方案


限制

脚本执行和 API 请求不会导致触发器运行。例如,调用Range.setValue()编辑单元格不会导致电子表格的onEdit触发器运行。

https://developers.google.com/apps-script/guides/triggers

所以,是的,据我了解,不能那样做。


推荐阅读