应用程序脚本:脚本已完成,但返回的值不是受支持的返回类型

时间:2017-09-13 15:22:59

标签: google-apps-script

我有以下客户端应用脚本html页面:

  <body>

   <form id="myForm" onsubmit="handleFormSubmit(this)">


  <div>
  <label for="optionList">Click me</label>
  <select id="optionList" name="email">
  <option>Loading...</option>    
  </select>

  </div>


  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js">



  </script>
  <script>
  // This code in this function runs when the page is loaded.
  $(function() {
    google.script.run.withSuccessHandler(buildOptionList)
        .getAllOptions();  

  });


  function buildOptionList(options) {
    var list = $('#optionList');


    list.empty();
    for (var i = 0; i < options.length; i++) {
    console.log(options[i]);
      list.append('<option value="' + options[i].toLowerCase() + '">' + options[i] + '</option>');
  //        list.append('<option value="' + options[i]["email"] + '">' '</option>');


    }
  };


  </script>


    </body>

我正尝试使用以下命令从服务器端的电子表格中将电子表格的所有行作为JS对象发送:

  function getAllOptions() {

       var ss = SpreadsheetApp.getActiveSpreadsheet();
    var mainSheet = ss.getSheetByName("Main");
    var main_range = mainSheet.getDataRange();//THIS GETS EVERYTHING, I DON'T THINK IT CAN TAKE A SUBRANGE
      objects = getRowsData(mainSheet, main_range,3);


    output = [];
      for (i in objects) {
        var obj=objects[i]
        output.push(obj);

      }

        Logger.log(output);

    return output;

  }

目标是在客户端填充选择框,但我在标题中收到错误。如何将对象从服务器发送到客户端?

1 个答案:

答案 0 :(得分:1)

这是我如何做的。

使用Javascript:

 $(function() {
        $('#txt1').val('');
        google.script.run
          .withSuccessHandler(updateSelect)
          .getSelectOptions();
      });

function updateSelect(vA)
{
  var select = document.getElementById("sel1");
  select.options.length = 0; 
  for(var i=0;i<vA.length;i++)
  {
    select.options[i] = new Option(vA[i],vA[i]);
  }
}

Google Apps脚本:

function getSelectOptions()
{
  sortOptions();
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Options');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var options=[];
  for(var i=0;i<vA.length;i++)
  {
    options.push(vA[i][0]);
  }
  return vA;
}