google-apps-script - 当一个或多个单元格在一个范围内发生变化时运行触发脚本
问题描述
我是谷歌表格和脚本应用程序的新手。我正在使用谷歌表格来维护实时项目预算。我创建了一个历史选项卡来捕获历史高级信息(项目代码、类别、总批准预算、预计成本、日期戳)。每次脚本运行时,它都会捕获 4 行数据。
function recordHistory() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName('ForMaster');
var sheet2 = ss.getSheetByName('History');
var data = sheet1.getRange('S84:W87').getValues();
var last_row = sheet2.getLastRow();
sheet2.getRange(last_row + 1,1,4,5 ).setValues(data);
}
我想设置一个触发器,该触发器在数据范围(S84:W87)中的任何单元格发生更改时运行。
我尝试了以下方法,但似乎不起作用。
function setupTrigger() {
ScriptApp.newTrigger('recordHistory')
.forSpreadsheet('1TSX27lzmOpv6P8Z8zJJhYem_yLQwP-gYK4WYHJ3LEuA')
.onEdit()
.create();
}
function recordHistory(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName('ForMaster');
var sheet2 = ss.getSheetByName('History');
var data = sheet1.getRange('S84:W87').getValues();
var last_row = sheet2.getLastRow();
sheet2.getRange(last_row + 1,1,4,5 ).setValues(data);
}
解决方案
解释:
您不需要可安装的触发器,因为您不使用任何需要许可的服务。
- 您可以改用简单的
onEdit(e)
触发器。
为了定义S84:W87
您希望接受编辑的范围,您可以这样做:
row>=84 && row <= 87 && col >=19 && col <=23
84
是起始行,87
是结束行,列19
是S
,列23
是W
。
此外,您只想接受工作表上的编辑ForMaster
。
因此,该if
声明将如下所示:
if(as.getName()=="ForMaster" && row>=84 && row <= 87 && col >=19 && col <=23)
解决方案:
function onEdit(e) {
const ss = e.source;
const as = ss.getActiveSheet();
const row = e.range.getRow();
const col = e.range.getColumn();
if(as.getName()=="ForMaster" && row>=84 && row <= 87 && col >=19 && col <=23){
const sheet2 = ss.getSheetByName('History');
const data = as.getRange('S84:W87').getValues();
const last_row = sheet2.getLastRow();
sheet2.getRange(last_row + 1,1,data.length,data[0].length).setValues(data);
}
}
注意!
触发器在用户编辑
onEdit
时触发。此函数不会被公式或其他脚本触发。同样,这是一个触发功能。你不应该手动执行它,你实际上会得到错误。您所要做的就是将此代码片段保存到脚本编辑器,然后它将在编辑时自动触发。
推荐阅读
- sql - 唯一地附加表列值
- python - python文件中的tkinter文本框可见性
- javascript - 从子接收道具到父反应组件的最佳方式
- docker - 如何找到从 docker 运行的 hadoop 集群?
- http - HTTP 请求如何被拆分为多个数据包?
- kotlin - 无法在 kotlin 中将 text2 设置为 milliuntilfinish ... valueof 显示错误
- javascript - 无法从 rails 中的 vendor 文件夹加载资产
- javascript - HUGO:由于 MIME 类型(“text/html”)不匹配而被阻止(X-Content-Type-Options: nosniff)
- ios - 从 Swift 中的 Share Extension 获取数据
- r - 将新值添加到 R 中的嵌套列表中