2016-05-02 3 views
0

Ich habe eine Excel-Arbeitsmappe (Spreadsheet) in meinem Laufwerk Konto mit mehreren Blättern, in einem dieser Blätter habe ich 5000 Datensätze.Sehr langsam, um JSON mit Apps zu erhalten. Skript-Tabelle

Ich benutze dieses Skript (Apps Script), um die Datensätze im JSON-Format von einem Android-Gerät zu erhalten: Das Skript funktioniert, wenn die Datensätze sind wenige, aber mit einer Menge von Aufzeichnungen nie zu Ende.

function traerRubros() { 
    var libro = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1-Vv3tsn7QYDa7rOsha4ebj9vJyjegG7j-xpDMbOOAuY/edit#gid=825509855'); 

    var sheet = libro.getSheetByName('Articulos'); 

    var json1 = convertSheet2JsonText(sheet); 

    return JSON.stringify(json1); 
} 

function convertSheet2JsonText(sheet) { 
    // first line(title) 
    var colStartIndex = 1; 
    var rowNum = 1; 
    var firstRange = sheet.getRange(1, 1, 1, sheet.getLastColumn()); 
    var firstRowValues = firstRange.getValues(); 
    var titleColumns = firstRowValues[0]; 

    // after the second line(data) 
    var lastRow = sheet.getLastRow(); 
    var rowValues = []; 
    for(var rowIndex=2; rowIndex<=lastRow; rowIndex++) { 
    var colStartIndex = 1; 
    var rowNum = 1; 
    var range = sheet.getRange(rowIndex, colStartIndex, rowNum, sheet.getLastColumn()); 
    var values = range.getValues(); 
    rowValues.push(values[0]); 
    } 

    // create json 
    var jsonArray = []; 
    for(var i=0; i<rowValues.length; i++) { 
    var line = rowValues[i]; 
    var json = new Object(); 
    for(var j=0; j<titleColumns.length; j++) { 
     json[titleColumns[j]] = line[j]; 
    } 
    jsonArray.push(json); 
    } 
    return jsonArray; 
} 

Warum dauert es so lange? Gibt es eine Optimierung in diesem Skript, die Sie tun können, um es schneller zu machen? Welche Alternative kann ich empfehlen, um schnell Datensätze zu erhalten?

Antwort

2

Wenn Sie getRange() oder getValues ​​() innerhalb einer Schleife ausführen, wird der Code immer langsam. Zweitens gibt getValues ​​() Array [] [] zurück. Es besteht keine Notwendigkeit, es in ein anderes Array zu kopieren.

// after the second line(data) 
    var lastRow = sheet.getLastRow(); 
    var colStartIndex = 1; 
    var rowStart = 2; // Column and Rows start at index 1 
    var rowValues = sheet.getRange(rowStart, colStartIndex, sheet.getLastRow(), sheet.getLastColumn()).getValues(); 

// create json 
    var jsonArray = []; 
... 
... 
+0

danke, ich benutze jetzt einen Code an csv übergeben und arbeitet schnell – seba123neo