2016-10-07 5 views
0

Ich arbeite an einer GAS-Webanwendung, die eine Tabelle liest (sie ist nicht mit der Tabelle verknüpft und kann nicht aus anderen Gründen verwendet werden).Beschleunigung der Google Web App-Tabellenkalkulation loading

Ich lade in dem Blatt oder einen Bereich davon, wie folgt aus:

var ss = SpreadsheetApp.openById(ssId); 
dataSheet = ss.getSheetByName('Projects'); 
var data = dataSheet.getRange('A1:BL').getValues(); 

Ich habe eine Menge von Tests durchgeführt, und mit meinem schwach besiedelten A1: BL5500 Tabelle (mit einer angemessenen Anzahl von Zellen gefüllt mit ein paar Dutzend Zeichen Text), dauert die Ladezeit etwa 6 Sekunden. Ich habe named Bereiche und viele Dinge ausprobiert, aber ich kann es nicht schneller als das bekommen.

Was ich wirklich brauche, ist 1 Spalte des Blattes, dann suche ich nach der Zeile, die ich brauche, und dann brauche ich diese Zeile. Aber das Laden der 1 Spalte dauert fast die gleiche Zeit wie das Laden der gesamten Sache. Gibt es einen besseren Weg, dies zu tun? Die Verzögerung ist problematisch.

Hier ist das Timing Zusammenbruch:

SpreadsheetApp.openById(ssid) [0.174 seconds] 
Spreadsheet.getSheetByName([Projects]) [0 seconds] 
Sheet.getRange([A1:BL]) [0.387 seconds] 
Range.getValues() [6.483 seconds] 

Zum Vergleich hier ist das Laden nur eine Spalte:

SpreadsheetApp.openById(ssid) [0.164 seconds] 
Spreadsheet.getSheetByName([Projects]) [0 seconds] 
Sheet.getRange([A1:A]) [0.336 seconds] 
Range.getValues() [5.887 seconds] 

Dies sind nur einzelne Läufe sind die Zeitunterschiede nicht signifikant (sie variieren).

+0

Ich habe eine Problemumgehung: Ich habe ein neues Blatt erstellt, von dem eine Spalte der Spalte entspricht, nach der ich suchen muss. Ich lade das. Wenn ich meine Suche abgeschlossen habe, lade ich nur die relevante Zeile aus dem ganzen Blatt. Es dauert die gesamte Zeit von etwa 8 Sekunden bis etwa 2, was akzeptabel sein könnte. – KeithKeithBoBeith

+0

Bitte fügen Sie diese Lösung als Antwort hinzu. –

+0

Ich fand auch, dass das Parsen der veröffentlichten CSV von SS viel schneller sein. –

Antwort

0

Wie ich oben erwähnt habe, fand ich eine Antwort, die für andere hilfreich sein könnte. Ich habe ein zweites Blatt ("ProjectIndex") erstellt und zwei Spalten eingerichtet, die nur auf die entsprechenden Spalten in "Projects" zeigten (ich hatte ursprünglich gesagt, dass ich nur eine Spalte durchsucht habe, um es einfacher zu halten: I ' Ich suche eigentlich zwei). Ich lade diese Daten, finde die Zeile von Interesse und gehe zurück zu "Projects" und lade nur die Zeile, die ich will.

var ss = SpreadsheetApp.openById(ssId); 
dataSheet = ss.getSheetByName('ProjectIndex'); 
var data = dataSheet.getRange('A1:B').getValues(); 

... // search data and find row i 

var j = i+1; // account for zero-based array but 1-based row numbering 
var rc = 'A'+j+':BL'+j; // there are BL columns in Projects 
var record = ss.getSheetByName('Projects').getRange(rc).getValues(); 

Zeit ProjectIndex laden:

SpreadsheetApp.openById(ssid) [0.153 seconds] 
Spreadsheet.getSheetByName([ProjectIndex]) [0 seconds] 
Sheet.getRange([A1:B]) [0.282 seconds] 
Range.getValues() [0.504 seconds] 

Zeit eine Reihe von Projekten zu laden:

Spreadsheet.getSheetByName([Projects]) [0 seconds] 
Sheet.getRange([A4785:BL4785]) [0.513 seconds] 
Range.getValues() [0.352 seconds] 

ich mit einer Reihe am unteren Rand der Datei absichtlich dargestellt. Es kann sein, dass ich ProjectIndex asynchron früher laden könnte, ich weiß nicht, ob das die Dinge weiter beschleunigen würde und ich weiß sowieso nicht, wie ich es machen soll. Nachfolgende Suchvorgänge können im Prinzip schnell sein, außer dass unsicher ist, ob die Daten aktuell sind.