2017-09-25 43 views
0

我寫了這樣的事情在谷歌應用程序腳本:谷歌應用腳​​本數組 - 爲什麼返回未定義?

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)}; 
} 

我有什麼記:我想我要輸出值爲「股票」的getDisplayValue()分配值1的陣列,但當我輸出數組時,事實證明我收到了一系列「undefined」作爲輸出。確切地說,無論我的Google SpreadSheet中的value1是否爲「YES」,if語句都會將「ticker」「push」到crossup數組中,但不是推回顯示值,而是推回「未定義」 ...

幫助!!!怎麼來的?

回答

0

var name_cell沒有設置。 使用以下代碼,其中

cross_up_cell = sheet.getRange(2,1);

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

你好蒂亞戈,我認爲這可能不是原因,我實際上在引用的行之前的代碼: var ss = SpreadsheetApp.openById(「something」); var sheet = ss.getSheetByName(「PASTEVALUE」); 但它仍然無法工作...任何其他的想法? 非常感謝! –

+0

可能是因爲我無法以某種方式將諸如「object.method」之類的內容推送到Google應用程序腳本數組中? –

0

你永遠不完全定義name_cell,讓您的tickeroffset方法返回一個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(整行或者列,或者多行和多列)來獲得一個二維數組,我認爲這個數組的增量速度要快很多。

要麼在您的示例中定義name_cell,要麼編輯以使語法更改應該可以解決您的問題。如果您有任何問題或疑問,請告知我。

相關問題