google.script.run 返回未定义。我如何解决它?

google.script.run is returning undefined. How do I fix it?

我正在尝试从电子表格中获取数组并使用它来填充下拉列表。这是我的代码

code.gs

function doGet() {

  var page = HtmlService.createTemplateFromFile('Index'); 

return page.evaluate()

}

function include(filename) {
  return HtmlService.createHtmlOutputFromFile(filename)
      .getContent();
}

function getArrayList(){

  var ss = SpreadsheetApp.openById("1EjRFAYiMBw5BuNhFJRUVG4MpUjIIy8Oey5JLyiYxj3c");
  var sheet = ss.getSheetByName("Nomes");
  var values = sheet.getDataRange().getValues();

  var array = [];

  for each (var item in values){
    array.push(item[0]);
  }

  return array

}

Index.html

<!DOCTYPE html>
<html>

<?!= include('jQuery'); ?>

  <div class="demo" >

      <form id="myForm">
        <select id="selectNumber">
          <option>Choose a number</option>
        </select>
      </form>

<?!= include('JavaScript'); ?>

    </div>
</html>

JavaScript.html

<script>
        var options = google.script.run.getArrayList();
        console.log(options);

        $('#selectNumber').empty();
        $.each(options, function(i, p) {
            $('#selectNumber').append($('<option></option>').val(p).html(p));
        });

</script>

jQuery.html

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script>

如果我没有在 JavaScript.html 文件上使用 var options = google.script.run.getArrayList();,而是传递一个文字数组 var options = ["1","2","3"];,我的代码就像一个魅力。

我知道问题是 google.script.run 正在返回 Undefined,但我不知道我做错了什么。有人可以帮我吗?

values 是一个数组数组。要获取所有数据,您需要执行以下操作:

var a=[];
for(var i=0;i<values.length;i++)
{
  for(var j=0;j<values[0].length;j++)
  {
     a.push(values[i][j]);
}
}

或只是 return 个值

这对你有用吗?

google.script.run.function() 没有 return 值。所以 var options = google.script.run.getArrayList();optionsUndefined。使用 withSuccessHandler()getArrayList() 获取 returned 值。以下是更新后的 JavaScript.html.

<script>
        google.script.run.withSuccessHandler(sample).getArrayList();

        function sample(options) {
            $('#selectNumber').empty();
            $.each(options, function(i, p) {
                $('#selectNumber').append($('<option></option>').val(p).html(p));
            });
        }
</script>