【问题标题】:Order of running two consecutive appscripts运行两个连续应用脚本的顺序
【发布时间】:2022-01-13 13:35:13
【问题描述】:

为什么同一函数中的两个脚本以一个顺序运行而不是以另一个顺序运行?我有两个功能,当我先运行 FolderLists 然后 FolderMaker 运行,但如果我先运行 FolderMaker 则文件夹列表没有运行。

function Button(e) {
  var sheet = e.source.getActiveSheet();
  if (sheet.getName() === 'answers') {

      FolderMaker();
      SpreadsheetApp.flush();
      Utilities.sleep(3000)
      FolderList();

}
}

function FolderMaker(){
      createFoldersTasks_();
      createFolderByTask_();
      createFolders_();
      createFolderInFolder_();
      isFolderInFolder_();
}

function FolderList(){
      listFolers();
}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    我不知道你的意思是什么,当你这样打电话时是不是这样:`

    function Button(e) {
          FolderMaker();
          FolderList();
    }

    它工作正常,但是当你尝试这个时:

    function Button(e) {
          FolderList();
          FolderMaker();
    }

    它不起作用,我建议你可以尝试使用 msgbox 调试或添加断点,试试这个代码,如果你编辑名为“answers”的工作表,它将在谷歌工作表中显示一个消息框

    function onEdit(e) {
      var sheet = e.source.getActiveSheet();
      if (sheet.getName() === 'answers') {
          FolderMaker();
          SpreadsheetApp.flush();
          Utilities.sleep(300)
          FolderList();
    
    }
    }
    
    function FolderMaker(){
          Browser.msgBox('called FolderMaker');
    }
    
    function FolderList(){
          Browser.msgBox('called FolderList');
    }

    `

    【讨论】:

      【解决方案2】:

      没有理由,顺序应该无所谓

      • 如果第二个函数没有运行,很可能是第一个函数调用的某些函数导致了错误,从而停止了进一步的脚本执行。请检查您的executions
      • 另外,脚本停止执行,因为它超过了maximum quota limitScript runtime 甚至Triggers total runtime

      无论如何,由于您的功能都运行其他功能,您可以将它们合并为一个:

      function Button(e) {
        var sheet = e.source.getActiveSheet();
        if (sheet.getName() === 'answers') {
      
            FolderMaker();
        }
      }
      
      function FolderMaker(){
            createFoldersTasks_();
            createFolderByTask_();
            createFolders_();
            createFolderInFolder_();
            isFolderInFolder_();
            SpreadsheetApp.flush();
            Utilities.sleep(3000);
            listFolers();
      }
      

      旁注:

      您的函数被称为listFolers() 而不是listFolders() 是否正确?

      更新

      • 确保在绑定到电子表格的项目集合中,您没有任何重复的函数名称和触发器。


      【讨论】:

      • 谢谢,我以两种方式组合运行了这些函数,得到了相同的结果,首先使用 FolderMaker,然后使用 listFolers(我的拼写错误)它不起作用。有点摸不着头脑,应该和配额没关系。
      • 你能看出执行中有什么错误吗?否则,您能否分享一个示例电子表格以供复制?
      • 我现在可以看到您的问题了!您的电子表格包含两个脚本! LJJ Add companySWN add company 两个脚本都有同名的函数。由于两个脚本属于同一个电子表格,就好像它们在同一个脚本文件中并且触发器不知道要运行哪个函数一样。要么删除你不使用的脚本文件,要么注释掉或重命名这个脚本的函数。并确保只有一个 onEdit 触发器。
      • 我删除了 LJJ 添加公司。不幸的是,同样的问题,listFolers 仍然没有触发,它只是一个触发器。 :(
      • 我看到你们两个安装了 onEdit 触发器。你能去你的触发器,把它们全部删除,然后只安装一个触发器(从一个触发器函数调用所有必要的函数)
      猜你喜欢
      • 2012-11-23
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多