【发布时间】:2017-04-28 02:18:15
【问题描述】:
我想要完成的是用于项目管理的 Google 电子表格。我在网格中有很多单元格,用户应该选择项目是否已完成。现在这个电子表格将只对项目经理可用。我想象这个过程会起作用的方式是项目经理选择特定的单元格并将它们分配给技术人员的电子邮件地址。然后脚本将生成移动友好的 html UI 并将其发送给技术人员(我想到了 Google 表单,但我想创建更多定制的 UI)。然后,技术人员将在完成一项同时更新电子表格的任务后选择一个复选框。下次技术人员打开 UI 时,它会填充之前选中的所有复选框。 我发现我可以让它工作的唯一方法是绑定到电子表格的谷歌脚本网络应用程序。我创建了一个测试 HTML 文件和 .gs 文件:
.html 文件
<head>
<base target="_top">
<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
</head>
<body>
<h1> Web App Test </h1>
<input type="button" value="Click Me" id="buttonclicked" onclick="getSomeData()"/>
<div id="output" class="current">output</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
</script>
<script>
function getSomeData()
{
google.script.run
.withSuccessHandler(onSuccess)
.withFailureHandler(showError)
.testForWebApp();
myLog("in WebAppTest.html getSomeData()");
}
function onSuccess(testParam)
{
var div = document.getElementById('output');
if (sectionName == null)
div.innerHTML = "<p style='color:red;'>You didn't hit the script</p>";
else
div.innerHTML = "<p style='color:white;'>" + testParam + "</p>";
}
function showError()
{
var div = document.getElementById('output');
div.innerHTML = "<p style='color:red;'>You didn't hit the script</p>";
}
</script>
</body>
和 .gs 文件:
function doGet()
{
return HtmlService.createHtmlOutputFromFile('WebAppTest')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
function testForWebApp()
{
myLog("In testForWebApp()");
var msg = "Yep you hit the script!";
return msg;
}
function myLog(log)
{
//log = 'test';
Logger.log(log);
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName('log');
var lastRow = sheet.getLastRow();
sheet.insertRowBefore(1);
var newLogDateRange = sheet.getRange(1, 1);
var newLogTextRange = sheet.getRange(1, 2);
var now = new Date();
newLogDateRange.setValue(now);
newLogTextRange.setValue(log)
}
当我发布应用程序并点击生成的链接时,我看到我的 html 页面带有一个 Click Me 按钮。点击事件运行了getSomeData() 函数,该函数调用了google.script.run 函数。服务器端.testForWebApp() 被执行,因为我从myLog() 获得了一个日志条目,但从未调用过.withSuccessHandler 或.withFailureHandler。同时,应该在google.script.run 之后执行的myLog() 也永远不会运行。
我绝对不明白它是如何工作的,并且怀疑如果我将脚本作为 Web 应用程序发布,那么 HTML 将不再与脚本绑定,但我在网上找不到任何关于它的信息。
感谢您的帮助。
【问题讨论】:
标签: javascript google-apps-script google-sheets