意外删除行为google spreadsheetApp

时间:2016-03-01 16:30:38

标签: javascript google-apps-script google-sheets

我正在编写一个非常简单的脚本(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";    
}

}   

一切似乎都在起作用......除了脚本正在复制/删除两行而不是一行。不知道发生了什么,非常感谢帮助。

2 个答案:

答案 0 :(得分:0)

尝试检查触发changeType的{​​{1}}的{​​{1}}。 Event Objectsevent的枚举可以过滤掉您不能执行两次的调用。

答案 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()实例。