我运行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>
答案 0 :(得分:0)
建议:
由于您的项目是有界项目,
google.script.host.close()
删除
<script>
google.script.run.doSomething()
</script>
行情
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构建代码直接放入主函数中,最后将该函数绑定到按钮上。