Google apps script Folders.hasNext()从Google Sheets返回false,但直接从Google脚本调用时返回true
概述 我正在为我的谷歌工作表制作一个脚本 我有一个助手方法,它将电子邮件作为参数(字符串),然后将该电子邮件邀请到google驱动器文件夹 我还有edit()函数,每当Google Sheets中的字段发生更改时,就会调用该函数Google apps script Folders.hasNext()从Google Sheets返回false,但直接从Google脚本调用时返回true,google-apps-script,google-sheets,google-docs,Google Apps Script,Google Sheets,Google Docs,概述 我正在为我的谷歌工作表制作一个脚本 我有一个助手方法,它将电子邮件作为参数(字符串),然后将该电子邮件邀请到google驱动器文件夹 我还有edit()函数,每当Google Sheets中的字段发生更改时,就会调用该函数 问题: 当helper方法从Google脚本中自己调用时,它工作正常,我收到了一个邀请。 当在google sheets中即时消息时,从edit()触发helper方法时,它不会一直发送邀请。它在while函数处停止,该函数返回false: var newFolde
问题: 当helper方法从Google脚本中自己调用时,它工作正常,我收到了一个邀请。 当在google sheets中即时消息时,从edit()触发helper方法时,它不会一直发送邀请。它在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中进行更改时
床单)。但当我在Google中调试函数时,它返回true
脚本。您必须为特定用户注册
edit()
。对于简单的onEdit
触发器是不可能的
它返回false,因为当前用户没有任何内容。这是真的
======已更新=====
至于我,我认为每当我们需要用户的作用域时,为用户创建触发器是正常的。假设我们需要强制用户注册触发器。他必须运行regTrigger()
现在,您的任务是让用户有机会执行此功能一次(
regTrigger
)。例如,从菜单。或者在打开表强制执行某些事件时使其发生。我明白了。你能给我更多的指导吗,我没有谷歌脚本的经验。如何将其注册到特定用户?@TheGarrus请检查我消息的上次更新。谢谢。我怎样才能通过电子邮件发送布尔值到OnTigger函数?我让它运行onEdit,但它也需要有这些参数。
/**
* @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();
}