2016-10-18 5 views
0

Wie nehme ich ein 2D-Array in Google-Skript und schieben Sie das ganze Ding auf einen Bereich in einer Tabelle? HierMove 2d Array zu Spreadsheet

ist, was ich habe:

wird angenommen, dass Array erstellt und gefüllt und hat 6000+ Zeilen und 4 Spalten.

Der folgende Code gibt mir einen falschen Bereichsfehler.

Falsche Bereichsbreite von 0 sollte aber 4 (Linie 56, Datei "Code") sein:

formatted.getRange(1,1,targetArray.length,targetArray[0].length).setValues(targetArray);

Die folgenden Code-Funktionen, aber die Zeiten, weil die Datenmenge zu groß ist :

for(var i=0; i<formattedSheetLength; i++) 
    formatted.getRange(i+1, 1, 1, 4).setValues([targetArray[i]]); 

Antwort

1

Bearbeiten Hinweise: Aufgrund eines OP-Kommentars wurde der ursprüngliche Code geändert.

Kurze Antwort

Versuchen

function myFunction() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    // Create a jagged array for demonstration purposes 
    var targetArray = [ 
    [1,2], 
    [1], 
    [1,2,3], 
    [1] 
    ]; 

    /** 
    * These two loops are safe because they don't make calls to 
    * the SpreadsheetApp service. 
    */ 

    var height = targetArray.length; 
    //Check the max width. 
    var width = 0; 
    for(var i = 0; i < height; i++){ 
    width = Math.max(width,targetArray[i].length); 
    } 
    //Add the required empty values to convert the jagged array to a 2D array 
    var temp; 
    for(var i = 0; i < height; i++){ 
    temp = targetArray[i].length; 
    for(var j = 0; j < width - temp; j++){ 
     targetArray[i].push(''); 
    } 
    } 
    /** 
    * Send values to the spreadsheet in a single call 
    */ 
    var range = sheet.getRange(1,1,height,width).setValues(targetArray); 
} 

Erklärung

Nach der Fehlermeldung wird targetArray[0].length0 zurück. Wir könnten annehmen, dass targetArray ein gezacktes Array anstelle eines 2D-Arrays ist. Um die Verwendung einer hartcodierten Breite zu vermeiden, ist der obige Code ein Beispiel dafür, wie ein gezacktes Array in ein 2D-Array konvertiert werden kann.

Der Code besteht aus zwei Schleifen, die sicher zu verwenden, da sie nicht über ein Google Apps Script-Dienst nicht nennen.

+0

Ich habe dies zu Testzwecken versucht und es hat keinen Unterschied gemacht. Gewöhnlich möchte ich Werte wie die 4 nicht hart codieren, da sich dieser Wert in der Datenstruktur ändern könnte. Das targetArray [0] .length wird es so machen, dass, wenn sich die Länge der inneren Arrays ändert, das Programm damit umgehen kann. –

+0

@SergeInsas: Es tut mir leid, ich habe versehentlich meine Bearbeitung gespeichert, bevor ich fertig war. –

+1

keine Sorgen, ich sah es nur nebenbei und obwohl Sie einfach von "etwas" abgelenkt worden waren;), so, da ich dort war, habe ich es getan! –