google.script.run返回未定义的数组

时间:2018-11-28 18:24:24

标签: javascript arrays google-apps-script web-applications

我试图从服务器端函数getPrepList()返回一个数组。从客户端访问时,“ prepList []”返回“未定义”。这只是完整的code.gs文件的片段。

// //

function getPrepList(){
   var sheet = SpreadsheetApp.getActiveSpreadsheet();
   var doPrepRange = sheet.getRange('F:F');
   var itemNameRange = sheet.getRange('A:A');
   var prepList = new Array();

    for(var i = 1; i < getFirstEmptyRow(); i++){
      if(doPrepRange.getCell(i,1).getValue() == true){
        prepList.push(itemNameRange.getCell(i, 1).getValue());
      };
    };
    Logger.log(prepList);
   return(prepList);
 };


function doGet(){
  return HtmlService.createHtmlOutputFromFile('index');
}; 

// //

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <h1><div align="center">PREP LIST MAKER v 2.0</h1></div>

    <button align="center" onClick="createCountSheet()">Nightly Count Sheet</button><br />
    <button align="center" onClick="showPrepList()">Get Prep List</button><br />

    <script>

    console.info("before execution");
    function createCountSheet(){
      google.script.run
        .generateCountSheet();
     };

     google.script.run 
       .withSuccessHandler(showPrepList)
       .getPrepList();

    function showPrepList(prepList){
      console.log(prepList);
    };

     </script>
  </body>
</html>

2 个答案:

答案 0 :(得分:1)

尝试一下:

function getPrepList(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();;
  var rg=sh.getDataRange();
  var vals=rg.getValues();
  var prepList=[];
  for(var i=1;i<vals.length;i++){
    if(vals[i][5]){
      prepList.push(vals[i][0]);
    }
  }
  return prepList;
}

我不清楚您想要什么表,所以我只是选择了活动表。我假设您有一个标题行,所以我从1开始而不是从0开始循环。顺便说一下,我没有对此进行测试,因此您可能需要对其进行一些调整。

答案 1 :(得分:1)

如果您通过按钮呼叫showPrepList(prepList)

<button align="center" onClick="showPrepList()">Get Prep List</button><br />

prepList将是undefined,因为您没有将任何参数作为prepList传递。

尝试

<button align="center" onClick="showPrepListFromSheet()">Get Prep List</button><br />

<script>

console.info("before execution");
 function showPrepListFromSheet(){
 google.script.run 
   .withSuccessHandler(showPrepList)
   .getPrepList();
function showPrepList(prepList){
  console.log(prepList);
};
}</script>

阅读: