应用程序脚本不会始终更新Google电子表格单元格值

我正在使用html代码来创build一个仪表板,用户可以select一个date,然后根据select的date从远程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); }; 

当我从脚本编辑器中select函数(fncOpenMyDialog())时,它在电子表格中创build一个仪表板,我可以selectdate,但是在functionToRunOnFormSubmit函数中,我正在logging参数,然后相应地设置B3和B4单元格值。 它也没有得到更新也没有得到login脚本编辑器。

问题是在调用google.script.run函数(这是一个asynchronous的ajax调用)之后,您正在调用“close”。

在某些情况下,它甚至可能不会给浏览器足够的时间来启动ajax调用,或者因为页面正在closures而被取消。 所以有时可能会到达后端脚本,有时不会。

看看文档,并处理成功(从那里closures对话框)和失败(向用户显示错误)

https://developers.google.com/apps-script/guides/html/reference/run

尽pipe文档没有明确的显示,你可以像这样钩住两个调用:

google.script.run.withFailureHandler(onFailure).withSuccessHandler(onSuccess).yourCall();