2017-09-25 1 views
0

Ich habe so etwas wie dies auf Google App Script geschrieben:Google App Script Array - Warum nicht definiert?

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

Was ich im Sinne hatte: Ich dachte, ich ein Array von value1 mit dem Wert „Ticker“ zuweisen, indem getDisplayValue() zur Ausgabe gehen, aber Als ich das Array ausgab, stellte sich heraus, dass ich eine Reihe von "undefined" als Ausgabe erhielt.

Um genau zu sein, wann immer Wert1 wirklich "Ja" auf meinem Google SpreadSheet ist, pushte die if-Anweisung "Ticker" in das CrossUp-Array, aber anstatt den Anzeigewert zurück zu schieben, schob es "undefined" ...

Hilfe !!! Woher?

Antwort

0

Die Variable name_cell ist nicht festgelegt. Verwenden Sie den folgenden Code:

cross_up_cell = Blatt.getRange (2, 1);

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

Hallo Thiago, ich denke, es könnte nicht der Grund sein, ich hatte tatsächlich die Codes vor den zitierten Zeilen: var ss = SpreadsheetApp.openById ("etwas"); var Blatt = ss.getSheetByName ("PASTEVALUE"); Aber es funktioniert immer noch nicht ... Irgendwelche anderen Ideen ??? Vielen Dank !!! –

+0

könnte es sein, dass ich etwas wie "object.method" irgendwie nicht in ein google app script-array schieben kann? –

0

Sie definieren nie vollständig name_cell, so dass Ihre offset Methode für ticker gibt eine undefined Zelle/Bereich, die dann auf Ihre crossup Array geschoben wird.

Ihre Syntax ist ein wenig seltsam mit der Initialisierung und Variablen zuweisen, also habe ich das Snippet neu geschrieben Sie auf dem Laufenden:

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... 

} 

Statt schrittweise Versetzen Zellen, Sie getDisplayValues() eines erweiterten Range (Voll Reihe verwenden können oder Spalte, oder mehrere Zeilen und Spalten), um ein 2D-Array zu erhalten, von dem ich denke, dass es viel schneller ist, es zu erhöhen.

Entweder definieren Sie name_cell in Ihrem Beispiel oder bearbeiten, um die Syntaxänderungen vorzunehmen, um Ihr Problem zu beheben. Lassen Sie mich wissen, wenn Sie irgendwelche Probleme oder Fragen haben.

Verwandte Themen