首页 > 解决方案 > 为什么此代码返回 3 维数组

问题描述

我想获取多个值,所以使用getValues但它返回数组意外维度。
在下面的代码中,sheet是一个得到SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Example");的对象。

var rng = sheet.getRange(2,1,3);    
var rngVls = rng.getValues();

Logger.log(rng.getValue()); // log1
Logger.log(rngVls);         // log2
Logger.log(rngVls[0]);      // log3

我期望得到如下结果。log2 是我想要得到的。

  • log1 = 好极了
  • log2 = [[Bravo],[查理],[Delta]]
  • log3 = 好极了

但意外的维度如下所示。我不明白为什么。

  • log1 = [布拉沃,[]]
  • log2 = [[[Bravo],[查理],[Delta]],[]]
  • log3 = [[布拉沃],[]]

请帮帮我,我怎样才能得到一个二维 BCD 阵列?


-添加了道歉-

uhhhhhh 我很抱歉浪费你的时间,这只是我的愚蠢错误。我读的不是“日志”,而是“运行成绩单”。我得到了我想要的,谢谢大家的好意。我感觉很沮丧让代码。

标签: javascriptarraysmultidimensional-arraygoogle-apps-scriptgoogle-sheets

解决方案


getValues()正在返回一个二维数组。不要依赖将对象记录到日志中来确定其属性。而是使用适当的 JavaScript 1.6 方法,如typeof, instanceof, JSON.stringify(object) 等。

例子:

function logSomeThings(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var rng = sheet.getRange(2,1,3);    
  var rngVls = rng.getValues();

  Logger.log('log1 %s', typeof rng.getValue()); 
  Logger.log('log2 %s', rngVls instanceof Array);
  Logger.log('log3 %s', rngVls[0] instanceof Array);
  Logger.log('log4 %s', typeof rngVls[0][0]); 
  Logger.log('log5 %s', typeof rngVls[0][0][0]); 
}

结果

[19-01-31 10:32:24:187 CST] log1 number
[19-01-31 10:32:24:188 CST] log2 true
[19-01-31 10:32:24:189 CST] log3 true
[19-01-31 10:32:24:189 CST] log4 number
[19-01-31 10:32:24:190 CST] log5 undefined

关于 JSON.stringify(rngVls);

Logger.log('log6 %s', JSON.stringify(rngVls)); 

记录这样的事情

[19-01-31 11:02:20:061 CST] log6 [[1],["#N/A"],[2]]

笔记:

  1. getValue()返回引用范围的左上角值。
  2. Google Apps Script IDE 不具备与其他工具(如 Google Chrome 开发者工具的控制台)相同的功能。

有关的


推荐阅读