Ich versuche, eine Web-App mit Hilfe von Google Apps Script zu entwickeln, die in eine Google Site eingebettet werden soll und einfach den Inhalt eines Google Sheets anzeigt und mithilfe einiger einfacher Parameter filtert. Zumindest vorerst. Später könnte ich weitere Funktionen hinzufügen.
Ich habe eine funktionale App bekommen, aber festgestellt, dass das Filtern manchmal eine Weile dauern kann, da der Client manchmal bis zu 5 Sekunden auf eine Antwort vom Server warten musste. Ich entschied, dass dies höchstwahrscheinlich daran lag, dass ich das Tabellenblatt jedes Mal, wenn es aufgerufen wurde, mit der ID über die Klasse SpreadsheetApp geladen habe.
Ich entschied mich dafür, die Tabellenblattwerte in meiner doGet
-Funktion mit dem CacheService zu zwischenspeichern und die Daten jedes Mal stattdessen aus dem Cache abzurufen.
Allerdings bedeutet dies aus irgendeinem Grund, dass ein 2-dimensionales Array nun als ein 1-dimensionales Array behandelt wird. Und so lande ich beim Anzeigen der Daten in einer HTML-Tabelle mit einer einzelnen Spalte, wobei jede Zelle von einem einzelnen Zeichen belegt ist.
So habe ich das Caching implementiert; meiner Meinung nach mache ich laut der API-Referenz nichts falsch:
function doGet() {
CacheService.getScriptCache().put('data', SpreadsheetApp
.openById('####')
.getActiveSheet()
.getDataRange()
.getValues());
return HtmlService
.createTemplateFromFile('index')
.evaluate()
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
function getData() {
return CacheService.getScriptCache().get('data');
}
Dies ist das erste Mal, dass ich eine richtige Anwendung mit GAS entwickle (ich habe es zuvor in Sheets verwendet). Gibt es etwas sehr Offensichtliches, das mir entgeht? Ich habe keine Typbeschränkungen auf der CacheService-Referenzseite gesehen...