我为Google Spreadsheets创建了一个脚本,此脚本只是添加了一个新菜单项,如Custom Menu Items in a Spreadsheet所述。然后,我将这个脚本部署为一个Web App,我希望所有安装该应用程序的用户都能够看到新的菜单项。而且我被困在这一点上。使用Google Web App扩展Google Spreadsheets UI
据我所知,当您将脚本部署为Web应用程序时,onOpen函数会失去它的含义。因此,在doGet中,我为onOpen事件创建自定义触发器,将myOnOpen处理程序附加到它并在myOnOpen中添加一个菜单项,但该项不显示。
这里是我的代码:
function doGet() {
var newSheet = SpreadsheetApp.create("new sheet");
var newId = newSheet.getId();
ScriptProperties.setProperty('newId', newId);
ScriptApp.newTrigger("myOnOpen")
.forSpreadsheet(newId)
.onOpen()
.create();
};
function myOnOpen() {
var newId = ScriptProperties.getProperty('newId');
var sheet = SpreadsheetApp.openById(newId);
var entries = [ { name : "Show bingo", functionName : "Bingo" } ];
sheet.addMenu("My Menu", entries);
};
function Bingo() {
Browser.msgBox("Bingo!");
};
所以,当谁安装的应用程序在用户打开“新表”的电子表格,他没有看到“我的菜单”。我在这里做错了什么?为什么菜单项不显示?在这一天结束时,我想创建一个Web应用程序,该应用程序通过附加菜单和对话框扩展Google Spreadsheets UI。
欢迎任何建议。谢谢!
我无法弄清Bingo函数在新电子表格的脚本中如何结束......我也不能用于'myonopen'函数......你怎么想象这个过程?我的观点是,这是不可能的......为什么不创建一个模板,脚本已经包含在内,然后创建触发器?你能澄清一下吗?我真的好奇...... –
@Sergeinsas当用户执行应用程序时,会在他的GDrive中创建自定义触发器。该触发器附加到用户的GDrive中的特定电子表格。每次用户打开此电子表格时,都会调用myOnOpen。它的工作原理,我创建测试帐户,安装我的应用程序,打开“新工作表”,myOnOpen被调用。我甚至可以从myOnOpen函数(例如'sheet.setColumnWidth(1,200)')中修改电子表格,但是我不能在那里创建自定义菜单。模板不适合我,我希望用户上传他们的.xls文件,并且我想添加用于编辑这些文件的自定义用户界面。 – xman85
当用户打开SS时,您是如何测试myonOpen确实运行的? Bingo怎么样?它没有与电子表格的链接...这不符合“脚本和容器”的定义。 –