Folders.hasNext()从Google表格中返回false,但直接从Google Script调用时为true
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Folders.hasNext()从Google表格中返回false,但直接从Google Script调用时为true相关的知识,希望对你有一定的参考价值。
概观
我正在为我的谷歌表制作一个脚本。
我有一个帮助方法,它接收电子邮件参数(字符串),然后邀请该电子邮件到谷歌驱动器文件夹。
我还有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。
您必须为特定用户注册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
)。例如,从菜单中。或者在打开表格强制执行某些事件时实现。
以上是关于Folders.hasNext()从Google表格中返回false,但直接从Google Script调用时为true的主要内容,如果未能解决你的问题,请参考以下文章
使用 Google Datalab,如何在 Google BigQuery 中使用 UDF 从复杂查询创建表?
由于数据类型,无法查询从 Google 表格加载的 BigQuery 表
如何设置表的架构以在 Google App Scripts 中自动检测从 Google Cloud Storage 获取数据?