Google表格脚本随机无法完成

时间:2018-08-24 15:40:05

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

我有一个文档,随时有大约5个人参与。我正在运行15个单独的“ onEdit(e)”类型脚本。您在下面看到的脚本将数据从一个选项卡中删除,并在用户输入的适当列的值为“ yes”时将其移至另一选项卡。

此脚本的一般形式在其他几个选项卡中已经存在了许多个月。我们为每个新选项卡复制脚本。它已经工作了几个月没有问题。今天,我尝试将其复制到这些“ kabazi”标签,但出现问题。

通常它可以工作,但是有时(一次5到15之间)失败。从外观上看,它无法将数据复制到另一个选项卡上。我已经使用Browser.msgbox行作为任意调试器来查看脚本失败的地方。我已经在代码中移动了它,以便根据我是否看到消息框来知道脚本失败的原因(如果有更好的方法,请告诉我!)。

有趣的是,该脚本实际上在多个地方失败,但是是随机的。例如有时会失败:

target_sheet.insertRowAfter(last_row); 

其他时间失败:

source_sheet.getRange(edited_row, 1, 1, 9).copyTo(target_range); 

它也可能在其他地方失败,但我还没有走那么远。我唯一的想法可能是对其他脚本的onEdit(e)调用在此脚本运行的同时发生,并且会干扰性能。否则我不知道为什么有时会失败。该脚本没有引发任何错误。

有什么想法吗?

谢谢。

function onEdit(e){ // <---- (e)
  var edited_range = e.range; 
  var edited_row = edited_range.getRow(); 

  var activeSheet = e.source.getActiveSheet(); 
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 

  var source_sheet = ss.getSheetByName("Kabazi Pitches");
  var target_sheet = ss.getSheetByName("Kabazi In Progress"); 
  var last_row = target_sheet.getLastRow(); 

  var range_values = target_sheet.getRange("A1:A").getValues(); 

  var range_length = range_values.filter(String).length + 1;

  var target_range = target_sheet.getRange(range_length,1);


  if (activeSheet.getName() == "Kabazi Pitches") { 
    if (edited_range.getColumn() == 10) { 
      if (edited_range.getValue().toLowerCase() == "yes") {
        target_sheet.insertRowAfter(last_row); 

        Browser.msgBox(edited_range.getColumn()); 

        source_sheet.getRange(edited_row, 1, 1, 9).copyTo(target_range); 

        source_sheet.getRange(edited_row, 10, 1, 2).setValue(""); 
        source_sheet.deleteRow(edited_row)  }}}; // this will delete out the row of data from the Unmarketed tab so it is no longer there. 
}

0 个答案:

没有答案