【发布时间】:2021-11-08 05:56:13
【问题描述】:
我正在关注this question 中的解决方案,但是当我单击其中一个生成的按钮时,我收到此错误: 未找到脚本函数:test1。
const flags = {};
flags["test1"] = "data";
flags["test2"] = "data";
function onOpen(){
var ui = SpreadsheetApp.getUi();
Object.keys(flags).forEach(function (flag) {
this[flag] = function () {
addToFlagInteract(flag);
}
});
var flagMenu = ui.createMenu('Flag');
var flagSubMenu = ui.createMenu('Add to Flag');
Object.keys(flags).forEach(function (flag) {
flagSubMenu.addItem(flag,flag);
});
flagMenu.addSubMenu(flagSubMenu).addToUi();
}
function addToFlagInteract(flag){
//Do something
}
【问题讨论】:
-
this 会回答你的问题并解释田池的回答吗?
-
@TheMaster 从您的评论中,我注意到我忘记了the thread。我认为这个问题和它是一样的。所以,我删除了我的答案。因为我认为this thread可以很好地解释OP的问题。
-
@Tanaike 不需要删除。即使我们将其作为重复项关闭也可能会有所帮助。不过,在您的回答中,一个小问题是
onOpen在触发 onOpen 时会运行两次,对吗?另外,我认为 OP 错过了您在末尾添加onOpen()的部分。 -
@TheMaster 是的。我认同。当我看到这个问题时搜索了重复的问题,不幸的是,我找不到它。关于
run twice,例如,为了将onOpen作为全局运行,const sample = (_ => onOpen())()被放入脚本编辑器,当电子表格打开时,sample和onOpen按顺序运行。因此,我建议将onOpen()设置为全局。并且,感谢您的编辑。我重新打开了它。 -
@TheMaster 我认为你是对的。在放入一行
onOpen();和一行const sample = (_ => onOpen())()的情况下,两种情况都是一样的。当电子表格打开时,函数 put as global 运行,然后,function onOpen(){}运行。通过这个流程,我认为onOpen运行了 2 次。当onOpen安装为可安装触发器时,onOpen运行 4 次。当打开Spreadsheet时OP不想运行2次,例如function onOpen(e) {if (e) return; do something }和onOpen();,onOpen只运行一次。
标签: google-apps-script google-sheets