我正在使用html代码创建一个仪表板,用户可以在其中选择日期,然后根据所选日期从远程API中获取一些值,然后在工作表中显示这些值。
我的html文件类似于:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<link rel="stylesheet" href="/resources/demos/style.css">
<script>
$(function() {
$( "#datepicker" ).datepicker();
});
</script>
</head>
<body>
<form>
<select name="Student" id="category">
<option value="" selected="selected">Select Student</option>
<option value="Abercrombie, Amber">Abercrombie, Amber(Gr 11)</option>
<option value="Yupa, Jason">Yupa, Jason(Gr 9)</option>
</select>
Date: <input type="text" id="datepicker" name="datepicker">
<input type="submit" value="Submit" onclick="myFunction()">
</form>
<p id="demo"></p>
<script>
function myFunction() {
var x = document.getElementById("category").value;
var x2 = document.getElementById("datepicker").value;
//document.getElementById("demo").innerHTML = x;
google.script.run.functionToRunOnFormSubmit(x, x2);
google.script.host.close();
}
</script>
</body>
</html>
我的code.gs如下:
function fncOpenMyDialog() {
//Open a dialog
var htmlDlg = HtmlService.createHtmlOutputFromFile('HTML_myHtml')
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setWidth(500)
.setHeight(300);
SpreadsheetApp.getUi()
.showModalDialog(htmlDlg, 'Dashboard');
};
function functionToRunOnFormSubmit(fromInputForm, datevalue) {
Logger.log(fromInputForm);
Logger.log(datevalue);
SpreadsheetApp.getActiveSheet().getRange('B3').setValue(fromInputForm);
SpreadsheetApp.getActiveSheet().getRange('B4').setValue(datevalue);
};
当我从脚本编辑器中选择函数(fncOpenMyDialog())时,它在电子表格上创建一个仪表板,我可以选择日期但是在functionToRunOnFormSubmit函数中我记录参数然后相应地设置B3和B4细胞值。它没有得到更新它也没有登录脚本编辑器。
答案 0 :(得分:2)
问题是你在打电话&#34;关闭&#34;在调用google.script.run函数之后,这是一个异步的ajax调用。
在某些情况下,它甚至可能不会给浏览器足够的时间来启动ajax调用,或者因为页面正在关闭而被取消。所以有时它可能会到达后端脚本,有时候不会。
查看文档并处理成功(从那里关闭对话框)和失败(向用户显示错误)
https://developers.google.com/apps-script/guides/html/reference/run
虽然文档没有明确显示,但您可以像这样挂钩两个调用:
google.script.run.withFailureHandler(onFailure).withSuccessHandler(onSuccess).yourCall();