Google电子表格脚本,来回传递数组

时间:2015-03-02 06:12:23

标签: javascript html google-apps-script google-sheets

我似乎无法执行这个简单的操作,并且想知道我是否只是错过了一些明显的东西。我正在尝试将一个数组发送回一个HTML文件,在code.gs文件中它被正确创建并且我可以按预期迭代它但是当我将它传递回html文件时,它会失败。

我做错了吗?

我的index.html文件的内容:

<script>
  google.setOnLoadCallback(draw);

  function draw() 
  {
    var rows = google.script.run.callTo();
    alert("this will get called");
    for(i = 0; i < rows.length; i++)
    {
      alert(rows[i]);
      alert(i);
      alert("this will never get called");
    }
  }
</script>

我的Code.gs文件的内容:

function onOpen()
{
    SpreadsheetApp.getUi()
    .createMenu('Open this')
    .addItem('Show', 'doGetHtml')
    .addToUi();
}

function callTo()
{
    var empty_array = ['one', 'two', 'three', 'four'];
    for(i = 0; i < empty_array.length; i++)
    {
        //Browser.msgBox("item2 is " + empty_array[i]);
    }
    return empty_array;
}

function doGetHtml() 
{
    html = HtmlService.createHtmlOutputFromFile('index')
    .setSandboxMode(HtmlService.SandboxMode.IFRAME)
    .setHeight(400)
    .setWidth(1024);

    SpreadsheetApp.getUi() 
    .showModalDialog(html, 'Show this message');
}

1 个答案:

答案 0 :(得分:0)

我相信您只能通过将其传递给成功处理程序来访问服务器端函数返回的值:https://developers.google.com/apps-script/guides/html/reference/run

<script>
  function draw(rows) 
  {
    alert("this will get called");
    for(i = 0; i < rows.length; i++)
    {
      alert(rows[i]);
      alert(i);
      alert("this will hopefully get called");
    }
  }

  google.script.run.withSuccessHandler(draw).callTo();
</script>