由于缺乏对此的讨论,我不确定我是否错过了这一点,但是......
如果我有用户通过自定义菜单使用和查看电子表格,我需要将此应用程序部署为webapp以管理保护设置和实现API(可视化查询等),架构需要看起来像什么?从我在这里看到的,菜单将不会显示,所以我如何获得在一个屋檐下工作所需的一切?
答案 0 :(得分:1)
您可以拥有一个部署菜单的脚本以及作为Web应用程序工作的脚本。
您可以在电子表格的onOpen
功能中部署菜单。并且您有一个doGet
函数来编写您的Web应用程序代码(通常是UI)。通过服务URL而不是电子表格访问Web应用程序。
编辑: 要在电子表格中显示Web应用程序UI,您可以在其他功能中生成相同的UI,并从自定义菜单中调用该功能。您可能希望更改UI的尺寸以适应您的网络应用的尺寸
function onOpen(){
var menu = [{name: 'Show UI', functionName: 'showUI'}];
ss.addMenu('Show Custom UI', menu);
}
/* If you are using HtmlService to build a web app UI */
function showUI() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var html = HtmlService.createHtmlOutputFromFile('index'); // index.html houses your web app's UI code.
ss.show(html);
}
/* If you are using UIApp to build a web app UI */
function showUI() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var app = UiApp.createApplication();
/* Build UI here */
ss.show(app);
}
答案 1 :(得分:1)
通过在Google上孜孜不倦地狩猎拼凑了许多不同的资源后,我发现你实际上可以从SpreadsheetApp自定义菜单中启动WebApp,而且它并没有那么难。
您只需正常部署WebApp,并使用脚本的“项目属性”“文件”菜单选项来检索“项目密钥”。您只需复制/粘贴到您的客户端SpreadsheetApp的“查找图书馆”框as described here
安装库后,您可以添加自定义菜单以调用Library的doGet()&返回要在客户端SpreadsheetApp中显示的app对象:
function Shoo() {
var app = FooManShoo.doGet();
SpreadsheetApp.getActiveSpreadsheet().show(app);
}
function onOpen() {
var entries = [{name : 'man', functionName : 'Shoo'}];
SpreadsheetApp.getActiveSpreadsheet().addMenu('foo', entries);
}
希望这有助于其他人! :)