2017-12-08 1 views
0

Ich habe eine Schleife, deren Zweck es ist, ein Google-Blatt zu durchlaufen, das als sheet identifiziert und als ein zweidimensionales Array behandelt werden soll.Loop-Fehler in Google Tabellen

for (var i = 0; i < sheet.length; i++) { 
    var currentDataset = sheet.getRange(i+1, 1); 
    var currentData = currentDataset.getCell(1, 1).getValue(); 

    Logger.log(String(currentData)); 

    switch (String(currentData)) { 
    case string: 
     Logger.log("match"); 
     for (var ii = 0; ii < 16; ii++) { 
     currentDataset.getCell(1, ii+1).setValue(data[ii]); 
     } 
     break; 

    default: 
     Logger.log("no match"); 
     break; 
    } 
} 

Wenn die erste Zelle, currentData, in der aktuellen Zeile, currentDataset nach i Übereinstimmungen in einem switch Anweisung mit dem String-Wert string, wäre eine weitere Schleife durchlaufen die entsprechenden Werte in der jeweiligen Zeile zu ersetzen, mit successiindeces von data, ein Array. Wenn der aktuelle Zellenwert nicht übereinstimmt, wird die switch Standard und brechen, so dass die Schleife erneut durchlaufen.

Wenn die Funktion aufgerufen wird, beginnt die Schleife das Blatt zu durchlaufen, wobei alle Nichtübereinstimmungen standardmäßig berücksichtigt werden. Wenn die Schleife jedoch die Übereinstimmung erreicht, wird sie übersprungen. Hier sind, was die Protokolle wie folgt aussehen:

[17-12-08 08:20:13:909 PST] Mismatch Value 
[17-12-08 08:20:13:910 PST] default 
*** THIS IS WHERE THE MATCH VALUE SHOULD APPEAR *** 
[17-12-08 08:20:14:389 PST] Mismatch Value 
[17-12-08 08:20:14:390 PST] default 

ich den obigen Code neu geschrieben Variablen besser lesbar zu machen, wie es ursprünglich war in GAS, Kommentar bitte, wenn Sie ausführlichere Code benötigen, oder es finden sich hier (Zeilen 51 bis 62): https://github.com/organism/Scorecard-Builder/blob/master/src/scorecardBuilder.gs

+0

Nun 1. aller 'var currentDataset = sheet.getRange (i + 1, 1);' ist ein Bereich mit nur einer Zelle, so dass Sie nicht iterieren können. Außerdem bin ich mir ziemlich sicher, dass der Grund, warum du Code machst, nichts ist, weil er immer in die Standardoption von dir schaltet, also bricht er jedes Mal und macht nichts. –

+0

Wie sieht die erste Zeile Ihrer Tabelle aus? –

+0

@LioraHaydont, 'currentData' soll nur die erste Spalte in der angegebenen Zeile sein. Zweitens durchbricht der Break nur die switch-Anweisung, nicht die Schleife, oder zumindest sollte sie es sein. Drittens ist die erste Zeile genau die gleiche wie alle anderen Zeilen, mit einer Zeichenfolge in der ersten Zelle. –

Antwort

0

ich denke, das ist das, was Sie zu tun haben versucht:

function myfunction(){ 
    var ss=SpreadsheetApp.getActive(); 
    var sh=ss.getActiveSheet();//or whatever 
    var rg=ss.getDataRange(); 
    var vA=rg.getValues();//gets all the data on the sheet 
    for(var i=0;i<vA.length;i++){ 
    switch(typeof(vA[i][0])){ 
     case 'string': 
     Logger.log('Match=%s',vA[i][0]); 
     for(var j=0;j<16;j++){ 
      sh.getRange(i+1,j+1).setValue(vA[i][0]) 
     } 
     break; 
     default: 
     Logger.log('No Match=%s',vA[i][0]); 
     break; 
    } 
    } 
} 

Kalkulationstabelle vor der Ausführung:

enter image description here

Kalkulationstabelle Nach Laufen:

enter image description here

My Logger Ausgabe:

enter image description here

Wenn das nicht das, was Sie dann drehten tut mir leid, mich hier einwerfen.

+0

Nicht ganz. Jede Zeile enthält einen Zeichenfolgenwert in der ersten Spalte und dann ganzzahlige Werte in jeder folgenden Spalte in dieser Zeile. Das Skript soll bei einer übereinstimmenden ersten Zelle anhalten und dann die restlichen Spalten mit ihren jeweiligen ganzzahligen Werten gemäß einem externen Objekt ausfüllen. –