触发范围复制到另一个电子表格的Google脚本-对我不起作用

时间:2019-02-22 19:48:40

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

我的Google Apps脚本出现问题,应触发将范围复制到另一个Google电子表格。奇怪的是,如果通过“脚本编辑器”启动脚本,则该脚本可以完美运行。但是它不能通过触发器(onEdit)工作。

脚本本身更长,并且可以成功触发同一张电子表格中与数据处理相关的所有操作。仅特定范围到另一个电子表格的副本无效。但是正如我所提到的,如果通过脚本编辑器运行它,它将起作用。

请在下面看到我的脚本的简单表示形式:

   function onEdit(e){

   var sourceFile1 = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = sourceFile1.getActiveSheet();
   var selectedRange = sheet.getRange(44,1, 1, 29);
   var sourceData = selectedRange.getValues();       
   var destinationFile = SpreadsheetApp.openById("    ");
   var destinationSheet = destinationFile.getSheetByName("Orders");
   var lastRow = destinationSheet.getLastRow();
   lastRow = lastRow + 1;
   destinationSheet.getRange(lastRow, 1, 1, 29).setValues(sourceData);
   }

1 个答案:

答案 0 :(得分:2)

  • 在脚本中,当您使用脚本编辑器运行onEdit()时,它可以工作。
  • 但是当该函数作为OnEdit触发器运行时,它不起作用。
  • 在这种情况下,您是电子表格和脚本的所有者。

如果我的理解正确,那么这个答案如何?

我认为在您的脚本中,运行OnEdit事件时,在var destinationFile = SpreadsheetApp.openById(" ");处发生了与授权有关的错误。如果要确认这一点,请在函数作为OnEdit触发器运行后检查脚本编辑器的执行记录。

作为解决方案,如何将功能安装为可安装的触发器?

注意:

  • 在您的情况下,由于发生授权错误,因此可以安装功能名称onEdit()作为可安装的触发器。但是我建议将功能名称从onEdit()修改为其他名称。例如,它类似于installed_onEdit()
    • 由于onEdit()函数名称的功能是作为简单触发器运行的,因此,当onEdit()被安装为可安装触发器时,onEdit()的运行次数是简单触发器和可安装触发器的两倍触发器。

参考文献:

如果我误解了您的问题,而这不是您问题的解决方案,我深表歉意。