Ok, es scheint, als ob mein Problem darin bestand, dass sich Google auf seltsame Weise verhält - es führt das Skript nicht erneut aus, solange die Skriptparameter ähnlich sind, sondern verwendet zwischengespeicherte Ergebnisse aus den vorherigen Läufen. Daher wird keine erneute Verbindung zur API hergestellt und der Preis nicht erneut abgerufen. Es wird lediglich das zuvor zwischengespeicherte Skriptergebnis zurückgegeben.
Weitere Informationen finden Sie hier: https://code.google.com/p/google-apps-script-issues/issues/detail?id=888
und hier: Skript zum Zusammenfassen von Daten, die nicht aktualisiert werden
Meine Lösung bestand darin, meinem Skript einen weiteren Parameter hinzuzufügen, den ich nicht einmal verwende. Wenn Sie nun die Funktion mit einem Parameter aufrufen, der sich von früheren Aufrufen unterscheidet, muss das Skript erneut ausgeführt werden, da sich das Ergebnis für diese Parameter nicht im Cache befindet.
Wenn ich also die Funktion aufrufe, übergebe ich für den zusätzlichen Parameter "$ A $ 1". Ich habe auch einen Menüpunkt namens "Aktualisieren" erstellt. Wenn ich ihn ausführe, werden Datum und Uhrzeit in A1 eingetragen. Daher müssen alle Aufrufe des Skripts mit $ A $ 1 als zweitem Parameter neu berechnet werden. Hier ist ein Code aus meinem Skript:
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Refresh",
functionName : "refreshLastUpdate"
}];
sheet.addMenu("Refresh", entries);
};
function refreshLastUpdate() {
SpreadsheetApp.getActiveSpreadsheet().getRange('A1').setValue(new Date().toTimeString());
}
function getPrice(itemId, datetime) {
var headers =
{
"method" : "get",
"contentType" : "application/json",
headers : {'Cache-Control' : 'max-age=0'}
};
var jsonResponse = UrlFetchApp.fetch("http://someURL?item_id=" + itemId, headers);
var jsonObj = eval( '(' + jsonResponse + ')' );
return jsonObj.Price;
SpreadsheetApp.flush();
}
Und wenn ich den Preis eines Artikels mit der ID 5 in eine Zelle eingeben möchte, verwende ich die folgende Formel:
=getPrice(5, $A$1)
Wenn ich die Preise aktualisieren möchte, klicke ich einfach auf den Menüpunkt "Aktualisieren" -> "Aktualisieren". Denken Sie daran, dass Sie die Tabelle nach dem Ändern des onOpen()
Skripts neu laden müssen .