Google apps script 当副本由工作表组成时,如何保持Google Appscript触发器?

Google apps script 当副本由工作表组成时,如何保持Google Appscript触发器?,google-apps-script,Google Apps Script,我有一个主电子表格,人们会定期复制它。我在主控台上设置了几个on-edit触发器,但似乎无法在电子表格的副本上保持这些工作。有什么办法解决这个问题吗? 应用于它们绑定到的电子表格 在脚本中定义 制作电子表格副本时,也会复制绑定的应用程序脚本 因此,脚本中包含的简单onEdit触发器也将被复制,并可用于复制的电子表格 用户所要做的就是手动运行脚本一次,以触发授权流 补充ziganotschka的话 我们可以在脚本本身中添加可安装的触发器,并使用onOpen触发器安装它们 运行这些程序需要一次授权,

我有一个主电子表格,人们会定期复制它。我在主控台上设置了几个on-edit触发器,但似乎无法在电子表格的副本上保持这些工作。有什么办法解决这个问题吗?

  • 应用于它们绑定到的电子表格
  • 在脚本中定义
  • 制作电子表格副本时,也会复制绑定的应用程序脚本
  • 因此,脚本中包含的简单onEdit触发器也将被复制,并可用于复制的电子表格
  • 用户所要做的就是手动运行脚本一次,以触发授权流

补充ziganotschka的话

我们可以在脚本本身中添加可安装的触发器,并使用onOpen触发器安装它们

运行这些程序需要一次授权, 为此,您可以在google工作表上创建一个按钮,并为其指定onOpen功能

单击后,将发生授权。你可以走了

现在的问题是,如果我们要求工作表在打开时安装触发器,它将在每次工作表打开时继续安装触发器

一个简单的if逻辑可以是一个解决方案

示例代码:

    function onOpen() {

makeTriggerIfempty();
       
}


function makeTriggerIfempty() {
  
  var allTriggers = ScriptApp.getProjectTriggers();

  if(allTriggers.length < 1){

  createTimeDrivenTriggers();

  }
}

function createTimeDrivenTriggers() {
  // Trigger every 2 hours.
  ScriptApp.newTrigger('myFunction')
      .timeBased()
      .everyHours(2)
      .create();

  // Trigger every Monday at 08:00.
  ScriptApp.newTrigger('myFunction')
      .timeBased()
      .onWeekDay(ScriptApp.WeekDay.MONDAY)
      .atHour(8)
      .create();
}
函数onOpen(){ makeTriggerIfempty(); } 函数makeTriggerIfempty(){ var allTriggers=ScriptApp.getProjectTriggers(); if(allTriggers.length<1){ createTimeDrivenTriggers(); } } 函数createTimeDrivenTriggers(){ //每2小时触发一次。 ScriptApp.newTrigger('myFunction') .基于时间的() .每小时(2) .create(); //每周一08:00触发。 ScriptApp.newTrigger('myFunction') .基于时间的() .onWeekDay(ScriptApp.WeekDay.MONDAY) .atHour(8) .create(); }
你不能。如果您或其他用户制作了副本,则需要授权新副本中的触发器。你可以做的是让脚本通过单击来安装触发器,这样你或你的用户就不必担心每次手动安装触发器。触发器是简单的触发器还是可安装的触发器?