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

时间:2016-05-18 09:55:03

标签: excel web-services google-apps-script google-api google-apps

我正在使用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细胞值。它没有得到更新它也没有登录脚本编辑器。

1 个答案:

答案 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();