【发布时间】:2020-07-03 04:04:54
【问题描述】:
我一直在使用的模板遇到问题。我在共享驱动器上的文件夹中有一个模板文件,该文件包含一个包含创建功能和关闭功能的脚本,由该安装在从下拉列表中运行的编辑触发。
function onMyEdit(e) {
if(sh.getName()=="Sheet2" && e.range.columnStart==6 && e.range.rowStart==3 && e.value) {
switch(e.value) {
case 'Create':
Create();
break;
case 'Close':
Close();
}
e.range.setValue('');
}
}
创建函数在共享驱动器上的文件夹中创建模板的重命名副本,添加日历事件,并将某些数据写入驱动器中用作数据库的另一个电子表格。我在模板文件中手动安装了 onMyEdit 函数的触发器,但是当我创建副本时,触发器不起作用,因此关闭函数不会从新创建的工作表中运行。我尝试对创建功能进行编程以在新工作表上安装触发器。使用这个
var WOssID = WOss.getId(); //get the ID of the newly created work order spreadsheet
Logger.log(WOssID)
ScriptApp.newTrigger('onMyEdit')
.forSpreadsheet(WOssID)
.onEdit()
.create()
WOss 是我刚刚通过复制模板创建的电子表格,我检查了记录器并且 ID 确实与新工作表匹配。这确实解决了它,所以我可以从新创建的工作表中运行关闭功能,但它似乎向模板工作表添加了一个触发器而不是新工作表,并且每次我从模板文件运行创建功能时它都会添加一个触发器直到它限制在 20 处,然后全部中断。我一定是误解了一些东西,因为我不明白为什么当我有新创建的工作表的 ID 被调用时它会向模板工作表添加触发器。也希望让这一切都在 Ipad 上运行,所以相信这意味着我不能在菜单、打开呼叫或可点击按钮上使用添加。任何帮助表示赞赏。
更新
所以我现在有一个简单的 onEdit 触发器,它会在第一次编辑时为我的工作订单表创建一个安装的 onMyEdit 触发器,并且不会在我的模板文件中创建多个触发器。但是,我需要想办法在新创建的工作表中对其进行授权,而无需进入脚本编辑器。如果我打开新创建的工作表并进行编辑,新安装的触发器会显示在项目触发器中,但它不会运行,直到我首先尝试从脚本编辑器运行它,此时它要求授权。有没有办法将授权绑定到一个复选框,当单击该复选框时,弹出窗口似乎授权已安装的触发器以便它可以运行?
function onEdit(){
var WOss = SpreadsheetApp.getActiveSpreadsheet();
var WOssID = WOss.getId();
var allTriggers =
ScriptApp.getUserTriggers(WOss)//ScriptApp.getProjectTriggers();
Logger.log(allTriggers.length)
if(allTriggers.length == '0' ){
ScriptApp.newTrigger('onMyEdit').forSpreadsheet(WOssID).onEdit().create()
}
else(allTriggers.length != '0')
{}
}
【问题讨论】:
标签: google-apps-script google-sheets