【问题标题】:Google WebApps & Menus谷歌网络应用和菜单
【发布时间】:2013-09-01 05:29:53
【问题描述】:

由于缺乏对此的讨论,我不确定我是否错过了这里的重点,但是...

如果我有用户通过自定义菜单使用和查看电子表格,并且我需要将此应用程序部署为 web 应用程序以管理保护设置并实施 API(可视化查询等),那么架构需要是什么样的?根据我在此处阅读的内容,不会显示菜单,那么如何获得在 1 个屋顶下工作所需的一切?

Extend Google Spreadsheets UI with a Google Web App

【问题讨论】:

    标签: google-apps-script google-api google-sheets


    【解决方案1】:

    您可以有一个脚本来部署菜单以及作为 Web 应用程序工作。 您在电子表格的onOpen 函数中部署菜单。你有一个 doGet 函数来编写你的 web 应用程序代码(通常是 UI)。 Web 应用程序是通过服务 URL 而不是电子表格访问的。

    编辑: 要在电子表格中显示 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);
    }
    

    【讨论】:

    • 感谢您的建议,Srik,这是我的第一个假设。但是,我在使用 Google 查找东西方面并不差,但我没有找到任何有关如何从自定义菜单打开 URL 的示例。我所发现的只是人们说(出于安全原因)除了使用菜单在表单中显示 URL 或弹出供用户手动操作之外,无法做任何事情。还有另一种更少的米老鼠方法吗?
    • 我认为你应该改写你的问题以(明确地)声明你想从自定义菜单打开一个网络应用程序。是的,您是对的,您无法从自定义菜单中打开浏览器窗口。但是你可以有一个大的弹出窗口并输入你的 doGet 代码来显示 UI,但不能更多:(
    • 好吧,也许我不需要启动新的浏览器窗口,您知道自定义菜单是否可以在活动电子表格窗口中加载 web 应用程序用户界面吗?
    • 抱歉,我仍然不确定 - 你有 2 个解决方案,但 UiApp 似乎是从头开始构建 UiApp,这将不允许它访问 API,因为它没有发布为一个网络应用程序。我是否理解正确?
    • 您能否在问题中包含更多详细信息。 UI、电子表格菜单项和 Web 应用程序都是相互独立的,尽管它们通常一起使用。包括您想要实现的具体目标和一些代码的详细信息。
    【解决方案2】:

    在通过 Google 上的勤奋搜索拼凑出许多不同的资源后,我发现您实际上可以从 SpreadsheetApp 自定义菜单启动 WebApp,而且一点也不难。

    您所做的一切都是照常部署 WebApp,并使用脚本的“项目属性”文件菜单选项来检索“项目密钥”。您只需将其复制/粘贴到您的客户端电子表格应用程序的“查找库”框as described here

    安装库后,您可以添加自定义菜单来调用库的 doGet() 并返回应用对象以显示在您的客户端 SpreadsheetApp 中:

    function Shoo() {
    
      var app = FooManShoo.doGet();
      SpreadsheetApp.getActiveSpreadsheet().show(app);
    
    }
    
    function onOpen() {
    
      var entries = [{name : 'man', functionName : 'Shoo'}];
      SpreadsheetApp.getActiveSpreadsheet().addMenu('foo', entries);                   
    
    }
    

    希望这对其他人有帮助! :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      • 1970-01-01
      • 2011-07-08
      相关资源
      最近更新 更多