【问题标题】:google.script.run returns undefined arraygoogle.script.run 返回未定义的数组
【发布时间】:2018-11-28 18:24:24
【问题描述】:

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

////

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>

【问题讨论】:

  • 您希望在返回值中找到哪些类型的数据?多少数据?您是否查看了允许的类型?
  • 我将返回 Google 文档允许的所有字符串原语。返回大小取决于在贴花范围内返回“真”的行数。
  • 考虑在发送前对大数据进行字符串化,然后在接收后解析:return JSON.stringify(myData); ....myData = JSON.parse(receivedInput); 另请注意,由于重复使用电子表格服务(您当您可以使用内存数组时,在循环中调用 getValuegetCell)。

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


【解决方案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>

阅读:

【讨论】:

    【解决方案2】:

    试试这个方法:

    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 开始循环。顺便说一句,我没有对此进行测试,因此您可能需要对其进行一些调整。

    【讨论】:

    • 感谢您抽出宝贵时间回答。我对“code.gs”中的任何内容都没有问题。 getPrepList 函数在运行服务器端时返回正确的值。我遇到的问题是通过“google.script.run”检索阵列客户端。我的直觉(和非常有限的经验)是这是某种“异步”问题,我试图用“index.html”中的“withSuccessHandler”回调函数来解决。
    • 在客户端和服务器之间传递的内容有限制,您可能想在指南部分查看它们
    猜你喜欢
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多