【问题标题】:Folders.hasNext() returning false from Google Sheets but true when called directly from Google ScriptFolders.hasNext() 从 Google 表格返回 false,但在直接从 Google 脚本调用时返回 true
【发布时间】:2019-04-13 10:06:50
【问题描述】:

概述

我正在为我的 google 表格制作脚本。

我有一个辅助方法,它将电子邮件作为参数(字符串),然后将该电子邮件邀请到谷歌驱动器文件夹。

我还有 edit() 函数,只要 Google 表格中的字段发生更改,就会调用该函数。


问题:

当从 Google Scripts 自己调用辅助方法时,它工作正常,我收到了邀请。 当我在谷歌表格中时从 edit() 触发辅助方法时,它不会一直发送邀请。它在返回 false 的 while 函数处停止:

 var newFolder = DriveApp.getFoldersByName("New Folder");
  Logger.log(newFolder.hasNext());
  while(newFolder.hasNext()) {      -> returns false while in google sheets
    var folder = newFolder.next();
    Logger.log("folder -> " + folder);  
    folder.addViewer(newPersonEmail);
  } 

我尝试了什么:

Logger.log 表明 newFolder.hasNext() 在脚本返回 false 从edit() 函数调用(当我在谷歌中进行更改时 床单)。但是当我在 Google 中简单地调试函数时它返回 true 脚本。

【问题讨论】:

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


    【解决方案1】:

    您必须为特定用户注册edit()。简单的onEdit 触发器是不可能的。

    它返回 false,因为当前用户没有任何内容。这是真的。

    ===== 更新=====

    就我而言,我认为每次需要用户范围时为用户创建触发器是很正常的。假设我们需要强制用户注册触发器。他必须跑regTrigger()

    /**
     * @param {GoogleAppsScript.Events.SheetsOnEdit} e
     */
    function edit(e) {
      // there is the edit eveng action
    }
    
    /**
     * Register trigger
     * @returns {GoogleAppsScript.Script.Trigger}
     */
    function regTrigger() {
      var activeSpreadsheet = SpreadsheetApp.getActive();
      var triggers = ScriptApp.getUserTriggers(activeSpreadsheet).filter(function(
        trigger
      ) {
        return (
          trigger.getEventType() === ScriptApp.EventType.ON_EDIT &&
          trigger.getHandlerFunction() === 'edit'
        );
      });
    
      if (triggers.length) return triggers[0];
    
      return ScriptApp.newTrigger('edit')
        .forSpreadsheet(activeSpreadsheet)
        .onEdit()
        .create();
    }
    

    现在您的任务是让用户有机会执行此功能一次 (regTrigger)。例如,从菜单中。或者在您打开表格时强制执行某些事件。

    【讨论】:

    • 我明白了。你能给我更多的指导吗,我对谷歌脚本没有经验。如何将其注册到特定用户?
    • @TheGarrus 请检查我的消息的最后更新。谢谢。
    • 我如何将电子邮件和 shouldSend 布尔值传递给 onTrigger 函数?我让它在 onEdit 上运行,但它也需要这些参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2012-06-29
    • 2013-02-26
    相关资源
    最近更新 更多