gpt4 book ai didi

google-apps-script - 如何确定导致我的脚本运行的原因?

转载 作者:行者123 更新时间:2023-12-02 00:56:17 24 4
gpt4 key购买 nike

每当我尝试显示一个 UI 对话框(例如 msgBoxalert )时,它在通过菜单项(例如从 Google 表格)调用时工作正常,但如果我尝试从Google Apps 脚本编辑器(例如通过运行 > 运行功能)。

enter image description here

我猜这是因为 Google Apps 脚本编辑器无法显示任何用户界面。为了解决这个问题,我想创建一个包装函数来检查脚本的运行方式,而不是根据源显示 UI。

“执行”屏幕具有类型(编辑器、独立、触发器)的概念:

enter image description here

这让我觉得有一种方法可以以某种方式在代码中获取这种类型。

函数的伪代码:

function showMessage(message) {
var scriptSource = ???;
if (scriptSource === "Standalone") {
Browser.msgBox(message);
} else {
console.log(message);
}
}

我如何获得 scriptSource

我能找到的最接近的是 TriggerSource ,但缺少枚举值“Editor”和“Trigger”。此外,它是一个仅在 Trigger 上可用的属性。 .我不知道如何访问当前触发器。据我了解,这只能通过 event object 获得(例如,通过 triggerUid)作为触发器的函数。我在应用程序脚本编辑器中运行的这个方法无权访问事件对象。

最佳答案

这不是最佳解决方案,但我目前的解决方法是为每个函数创建 3 个版本,并将其调用方式附加到名称中。

例如,如果有一个“Hello World”函数:

function onOpen() {
var menu = [
{name: 'Hello World', functionName: 'helloWorldViaMenu_'},
];
SpreadsheetApp.getActive().addMenu('Custom', menu);
}

function helloWorldViaMenu_() {
helloWorld_(false);
}

function helloWorldViaEditor() {
helloWorld_(true);
}

function helloWorld_(invokedFromEditor) {
if (invokedFromEditor) {
Logger.log("Hello world");
} else {
Browser.msgBox("Hello world");
}
}

helloWorldViaEditor 是唯一一个末尾没有 _ 的,因此可以通过“选择功能”编辑器 UI 下拉菜单选择它。

关于google-apps-script - 如何确定导致我的脚本运行的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53975299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com