Folders.hasNext()从Google表格中返回false,但直接从Google Script调用时为true

问题描述 投票:0回答:1

概观

我正在为我的谷歌表制作一个脚本。

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

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


问题:

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

 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 access
1个回答
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)。例如,从菜单中。或者在打开表格强制执行某些事件时实现。

© www.soinside.com 2019 - 2024. All rights reserved.