Google Apps脚本-服务器端函数调用

时间:2018-08-26 10:28:23

标签: html google-apps-script serverside-javascript

我运行doGet()函数。它在电子表格上创建一个模式对话框。它将显示一个“关闭”和“制作副本”按钮,后者将运行服务器端功能doSomething(),该功能可复制模板。无论我将函数附加到按钮上还是直接在script标签中运行它,它都拒绝运行。反正有什么办法解决或至少调试一下?

Code.gs

function doGet() {
  return SpreadsheetApp.getUi().showModalDialog(HtmlService.createHtmlOutputFromFile('Index'), 'Report');
}

function doSomething() {
  var file = template.makeCopy();
  file.setName('NEW FILE NAME')
  google.script.host.close()
}

Index.html

    <!DOCTYPE html>
    <html>
      <head>
        <base target="_top">
        <script>
            google.script.run.doSomething()
        </script>
      </head>
      <body>
          <input type="button" value="Close" onclick="google.script.host.close()"/>
          <input type="button" value="Make Copy" onclick="google.script.run.doSomething();" />
      </body>
    </html>

2 个答案:

答案 0 :(得分:0)

  1. doGet()是Web应用程序的保留字。
  2. SpreadsheetApp.getUi仅可用于有限的项目
  3. google.script.host.close()是一种客户端方法,仅适用于对话框和侧边栏,不适用于Web应用程序。

建议:

由于您的项目是有界项目,

  • 更改doGet()函数的名称。
  • 从doSomething()中删除google.script.host.close()
  • 删除

    <script>
        google.script.run.doSomething()
    </script>
    
  • 完成上述更改后,添加菜单将调用已重命名的函数。如果仍然无法解决问题,请在浏览器控制台上查找客户端错误,并在Stackdriver日志中查找服务器错误。

行情

  

doGet(e)在用户访问Web应用程序或程序向Web应用程序发送HTTP GET请求时运行。


  

google.script.host是一个异步客户端JavaScript API,可以与包含HTML-service pages的Google文档,表格或表单中的对话框或边栏进行交互。要从客户端代码执行服务器端功能,请使用google.script.run。有关更多信息,请参见guide to communicating with server functions in HTML service

参考

答案 1 :(得分:0)

在Apps脚本中,doGet()和doPost()函数严格用于向基于GAS的网络应用发送HTTP请求。电子表格绑定的脚本可以作为Web应用发布-但是,根据文档

  

要使用HTML服务创建网络应用,您的代码必须包含一个   doGet()函数告诉脚本如何为页面提供服务。的   函数必须返回一个HtmlOutput对象,如本示例所示。

在您的情况下,showModalDialog()方法返回'void'。还有,

  

与网络应用不同,该脚本可为   文档,电子表格或表单不需要doGet()函数   具体来说,您无需保存脚本的版本或   部署它。相反,打开用户界面的功能必须   将您的HTML文件作为HtmlOutput对象传递给showModalDialog())   或活动文档的Ui对象的showSidebar()方法,   表单或电子表格。

长话短说,您无需将脚本部署为Web应用程序。相反,您应该将UI构建代码直接放入主函数中,最后将该函数绑定到按钮上。