我在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”。 ..
帮助!!!怎么样?
答案 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
或编辑以进行语法更改应该可以解决您的问题。如果您有任何问题或疑问,请告诉我。