我正在编写一个非常简单的脚本(onEdit)在Google表格中检查单元格中的值,并将编辑所在的行复制/粘贴到同一电子表格中的另一张表格中。到目前为止,这是我的代码:
function onEdit(e) {
var ss = e.source //get sheet from edit event
var s = ss.getActiveSheet();
if (s.getName() == 'currKarma')
{
var test = checkCellValue(e); //check cell value
if (test == true) {
var rowRng = e.range.getRow();
var copyVals = s.getRange("A" + rowRng + ":" + "G" + rowRng) //get the range for the row that contained the edited cell
var newSheet = ss.getSheets()[1];
newSheet.insertRowBefore(1);
var pasteRange = newSheet.getRange("A1:F1");
copyVals.copyTo(pasteRange); //copy range to second sheet
s.deleteRow(rowRng) //delete row that was copied
};
}
function checkCellValue(e) {
var chkData = e.value;
return chkData == "no";
}
}
一切似乎都在起作用......除了脚本正在复制/删除两行而不是一行。不知道发生了什么,非常感谢帮助。
答案 0 :(得分:0)
尝试检查触发changeType
的{{1}}的{{1}}。 Event Objects。 event
的枚举可以过滤掉您不能执行两次的调用。
答案 1 :(得分:0)
这是一个使用PropertiesService来解决我遇到的类似问题的解决方法"在编辑事件"上执行双重执行,如果您不想在可以工作的地方执行可安装触发器使用changeType。
function onEdit(e){
var delete_count = PropertiesService.getScriptProperties().getProperty("delete_count");
if (delete_count == null) {
e.source.deleteRow(e.range.getRow())//or call some other function here
var properties = PropertiesService.getScriptProperties();
properties.setProperty("delete_count", 1)
}
PropertiesService.getScriptProperties().deleteProperty("delete_count")
}
阻止第二个onEdit(e) - > .deleteRow()实例。