我尝试过在"stackoverfllow"网站上找到的代码示例,与从字符串调用函数有关.它们似乎不适用于Google App脚本.我收到一个错误,将"窗口"作为未定义的对象.
这是我想要解决的情况.我有一个电子表格,会有很多不同的表格.其中一些工作表将具有我编写代码时已知的名称.其他工作表的名称在我编写代码时并不完全为人所知(例如,基于动态数据).
当前文档告诉我"onEdit"事件处理程序的名称是"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)
}
}
Run Code Online (Sandbox Code Playgroud)
我实际上尝试过类似的代码.在谷歌环境中,"窗口"对象被标记为未知对象.
在我应该使用的环境中是否还有其他"对象"名称?这可以在Google Apps脚本环境中使用吗?
另外,我知道"function_exists"例程也是一个挑战.这将是我的下一个问题.我知道"typeof"操作,它在我编码时返回"string"
"if ( typeof rtn_name == function" ) .. "
Run Code Online (Sandbox Code Playgroud)
给定字符串中包含的名称,有没有办法测试例程是否存在?
我知道我可以使用"静态"名称并在"onEdit"例程中对它们进行硬编码.但我想编写一次例程,而不必为我编写的每个新电子表格修改它.我不想编写非常复杂的"onEdit"例程,而是专注于编写和测试单个工作表的"onEdit"函数.
我理解浏览器环境中的Javascript.谷歌应用程序脚本环境对我来说更加神秘.我发现文档非常简洁,需要更全面的解释.有关Google Apps脚本环境中存在的对象的任何其他信息都会有所帮助.
当然,我的第三步可能是编写一个"onEdit"例程,该例程根据与Edit事件关联的当前"范围"调度正确的子函数.
我是Google Apps脚本的新手.我正在寻找一个脚本解决方案.它可能可以在"Java"中完成,但这超出了我想要编码的范围.
我也是"stackoverflow"环境的新手.这对我来说似乎很神秘.(例如,如何指定哪个标签应与此问题相关联?如何知道哪些标签可用于此问题?如何将搜索限制为某些标签? - 我现在对"google"感兴趣应用程序脚本",当我选择右栏中的"javascript"按钮时,它会将我带入javascript答案,这可能不适用于google脚本环境.了解如何"分配"以下标签.我如何知道哪些标签是可以不用猜测?
所有和任何帮助表示赞赏.
我为Google Spreadsheet应用程序开发了几个通用脚本函数.目前,我将每个功能保存在我的笔记本电脑的单个文件中.为了将它们包含在电子表格中,我只知道一种方法.
将各个函数文件合并为一个文件.然后将合并文件中的数据复制并粘贴到电子表格的脚本编辑器中,替换以前的内容.
如果有一种方法(例如使用"项目")可以保存单个函数文件一次然后我可以在新脚本中根据需要引用这些函数,那将是很好的.
我不知道是否有这种可能性.我只在电子表格内容的树列表中看到一个名为"code"的节点.
任何帮助表示赞赏.
我有一个包含两个项目的电子表格.称他们为P1和P2.项目P1中有一个功能,我们将调用F1.
我有一个函数F2,在P2中试图调用F1.我收到一条错误消息,指出F1未定义.
代码(在P2中):
function F2()
{
var rc = F1();
Browser.msgBox("returned value: "+ rc);
}
Run Code Online (Sandbox Code Playgroud)
代码(在P1中):
function F1()
{
return "this is a test";
}
Run Code Online (Sandbox Code Playgroud)
两个项目都包含在同一个电子表格文件中.