首页 > 解决方案 > GAS Webapp/Dialog 返回意外结果

问题描述

对话框似乎使用与 webapps 相同的 web 界面,换句话说,前端 html/javascript 和后端 google 应用程序脚本。

如果我尝试返回由我的电子表格而不是直接向上的数组制作的数组,我会遇到一些意想不到的行为。

这是我的代码

function returnRowArray(number){
  if (number == null) number = 4;
  thisSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TST Project Tracker");
  console.log("L4 returnRowArray(): %s", number);
  var headerRow = thisSheet.getRange("A1:DC1").getValues();
  var resultRow = thisSheet.getRange(number,1,1,20).getValues();
  var result = {}
  result.info = resultRow[0][1];
  result.site = site;
  //result.row = resultRow;//LINE IN QUESTION
  console.log("L10: %s", JSON.stringify(result));
  return result;
  }

如果我从我的对话框中运行这个函数,它会返回 null 到对话框,但是注释掉的行会正确返回对象。

两个客户端记录的结果显示为

L35:空

L35:对象

分别,我可以从对象中提取值。

如果我运行服务器端测试

function test_returnRowArray(){
  var o = returnRowArray(4);
  console.log("L15: "+o);
  console.log("L16: "+ JSON.stringify(o));
}

它为两个版本提供了正确的结果。

那么这里发生了什么?我最初认为这是一个大小限制,但即使我做了我在这里所做的,使数组只是前 20 列,这仍然会发生。

有任何想法吗?

编辑:我会注意到如果我让它 result.row = ["this","array","works"] 它确实有效,那么 getrange 数组如何让它生气?

根据评论添加:

这就是前端调用的样子

  function importInfo(){
    google.script.run.withSuccessHandler(function(result){console.log("L35: %s", result);}).returnRowArray(row); 

}

标签: google-apps-script

解决方案


推荐阅读