我尝试过在“stackoverfllow”网站上找到的代码示例,与从字符串调用函数有关。它们似乎不适用于Google App脚本。我收到一个错误,将“窗口”作为未定义的对象。
这是我想要解决的情况。 我有一个电子表格会有很多不同 床单。其中一些工作表将具有已知的名称 在我编写代码时。其他工作表将具有未知的名称 正好在我编写代码时(例如,基于动态数据)。
当前文档告诉我“onEdit”事件的名称 handler是“onEdit”。由于你的名字是独一无二的,我在那里得出结论 只能在电子表格应用程序中使用此名称进行此类例程。
由于这种情况(上图),我想减少我的复杂性 “onEdit”功能。我想编写“onEdit”例程 对使用限定名称的子函数进行“动态”调用, 基于编辑事件发生的“工作表”的名称。
这是我想要的“onEdit”例程的伪代码示例。
function onEdit(src)
{
var act_sheet = src.getActiveSheet();
var sheet_name = act_sheet.getName();
var rtn_name = "onEdit_sheet_".sheet_name;
if ( function_exists(rtn_name) )
{
window[rtn_name](srv)
}
}
我实际上尝试过类似的代码。在google环境中,“window”对象被标记为未知对象。
我应该使用的环境中是否还有其他“对象”名称? 这可以在Google Apps脚本环境中使用吗?
此外,我知道“function_exists”例程也是一个挑战。 这将是我的下一个问题。我知道“typeof”操作,它 我编码
时返回“string” "if ( typeof rtn_name == function" ) .. "
如果在字符串中包含名称,是否有办法测试例程存在?
我知道我可以使用“静态”名称并在“onEdit”例程中对它们进行硬编码。 但我想编写一次例程,而不必修改它 对于我写的每个新电子表格。而不是写作 复杂的“onEdit”惯例,我想专心写作 并为单张纸张测试“onEdit”功能。
我理解浏览器环境中的Javascript。 Google应用 脚本环境对我来说更是一个谜。我找到了文档 非常简洁,需要更全面的解释。任何额外的 有关Google Apps脚本环境中存在哪些对象的信息 会有所帮助。
当然,我的第三步可能是写一个“onEdit”例程 根据当前“范围”调度正确的子功能 与编辑事件相关联。
我是Google Apps脚本的新手。我正在寻找一个脚本解决方案。 它可能可以在“Java”中完成,但这超出了其范围 我想要编码。
我也是“stackoverflow”环境的新手。大部分似乎都是 对我来说很神秘。 (例如,如何指定应关联哪些标记 有这个问题?我如何知道可以分配哪些标签 这个问题?如何将搜索限制为某些标签? - 我是 目前对“谷歌应用程序脚本”感兴趣,当我选择 右栏中的“javascript”按钮将我带入了javascript 答案可能不适用于谷歌脚本环境。发现 如何“分配”下面的标签。如何知道哪些标签可用 只是猜测?
所有和任何帮助表示赞赏。
答案 0 :(得分:6)
我知道在Apps脚本中使用字符串调用函数的两种方法。
function onEdit(e) {
var func = 'test';
this[func]();
//eval(func+'()'); //msgBox and eval don't play nice together
Browser.msgBox('finished');
}
function test() {
Browser.msgBox('test');
}
当然,使用this
方法时,您不应该在另一个范围内,例如来自使用new
调用的函数。但是我发布的这个完整的完整代码工作正常。
答案 1 :(得分:1)
对于ES8:
var GoogleAppsScrip = this;
function onEdit(e) {
var func = 'test';
GoogleAppsScrip[func]();
Browser.msgBox('finished');
}
答案 2 :(得分:0)
如果您知道存储功能的位置,则可以在检查时执行标准。
if(window.myFunction){//then do something};
function someFunction(){
if(this.florida.miami.beach.girls.boobs > 'b')
{
alert('Get Plane Ticket!');
}
else{
console.log('improvise')};
};
if(window.someFunction){
window.someFunction.call(new USA());
};