Google App脚本数组 - 为何返回未定义?

时间:2017-09-25 18:02:22

标签: arrays google-apps-script google-sheets

我在Google App Script上写过类似的内容:

var crossup = [];
var i;
var name_cell;
var cross_up_cell;
cross_up_cell = sheet.getRange(2, 1);
for (i = 1; i <= 12; i++) {
var ticker;
var value1;
ticker = name_cell.offset(0, i).getDisplayValue();
value1 = cross_up_cell.offset(0, i).getDisplayValue();
if (value1=="YES") {crossup.push(ticker)};
}

我想到的是:我以为我要输出一个value1数组,其值为“ticker”由getDisplayValue()赋值,但是当我输出数组时,我发现我收到了一系列“undefined” “作为输出。

确切地说,每当我的Google SpreadSheet上的value1真的为“YES”时,if语句就会“推送”“ticker”进入交叉数组,但是不会推回显示值,而是推回“undefined”。 ..

帮助!!!怎么样?

2 个答案:

答案 0 :(得分:0)

未设置var name_cell 。 使用下面的代码,其中

  

cross_up_cell = sheet.getRange(2,1);

sheet = SpreadsheetApp.getActiveSheet();
  cross_up_cell = sheet.getRange(2, 1);

答案 1 :(得分:0)

您永远不会完全定义name_cell,因此offset ticker方法返回undefined单元格/范围,然后将其推送到crossup数组

初始化和分配变量时,您的语法有点奇怪,所以我重写了您发布的代码段:

function myFunction() {
  var sheet = SpreadsheetApp.openById(*****).getSheetByName("PASTEVALUE"), //get sheet
      crossup = []; //initialize empty crossup array

  //get the display values in row 2 up to column 12
  var values = sheet.getRange(2, 1, 1, 12).getDisplayValues()[0]; 
  //get the display values in row 3 up to column 12, assuming they are in row 3
  var ticker = sheet.getRange(3, 1, 1, 12).getDisplayValues()[0];

  //initialize increment in for loop, i's value goes from 0 to values.length-1 (the array's full index range)
  for (var i in values) {
    //if the value in row 2, column "i" is "YES", push the value of row 3, column "i" to the crossup Array
    if (values[i] == "YES") crossup.push(ticker[i]); 
  }

  //do stuff with crossup...

}

您可以使用getDisplayValues()扩展Range(完整行或列,或多行和多列)来获取2D数组,而不是逐步抵消单元格,我认为这要快得多增量通过。

在示例中定义name_cell或编辑以进行语法更改应该可以解决您的问题。如果您有任何问题或疑问,请告诉我。