2016-03-01 66 views
0

我正在研究一个非常简单的脚本(onEdit),在Google表格中检查单元格中的值,并将编辑的行复制/粘贴到同一电子表格中的另一个工作表。这是我的代码到目前为止:意外的删除行为google spreadsheetApp

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

所以,经过一点挖掘,我越来越接近答案。我为onEdit触发器单元格设置了条件格式,看来我的函数检查单元格的值被调用两次,一次输入值时,再次应用格式时。任何关于如何避免这种情况的见解仍然值得赞赏。 – fleadram

+0

你的条件格式是什么样的? –

回答

0

尝试检查eventchangeType触发onEditEvent Objects。有一些changeType的枚举可以过滤掉你的呼叫,因为它不会被执行两次。

+0

非常感谢。这让我想到了触发器的类型,简单和可安装,并且我意识到我有堆叠触发器。我添加了一个可安装的触发器,然后命名为onEdit函数。 – fleadram

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