google-apps-script - 通过 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?解决方案是什么?我不想在定时触发器上运行它,我想永久捕获每一个新的数据行。
另外,我是否忽略了对整个问题的更优雅和简单的解决方案?
感谢您的时间。
解决方案
限制
脚本执行和 API 请求不会导致触发器运行。例如,调用
Range.setValue()
编辑单元格不会导致电子表格的onEdit
触发器运行。
https://developers.google.com/apps-script/guides/triggers
所以,是的,据我了解,不能那样做。
推荐阅读
- css - 使用 CSS 更改 Shiny titlePanel 的颜色
- php - 来自路由器的 Laravel 5 替代调用控制器
- neo4j - 当关系已经存在时如何记录?
- c# - 创建事件源作为 Visual Studio 安装项目安装程序的一部分
- angular - 使用弹簧安全性使 Http Connection 请求标头保持有角度的活动
- reactjs - Redux 状态正在更新,而无需分派任何操作
- vba - 使用 VBA 将 Word 表复制到 Excel 时出错
- amazon-redshift - 如何防止亚马逊红移中的重复条目
- azure - 任何带有 TTL 的 TCP ping
- java - Java中的匹配规则集