Ich habe ein benutzerdefiniertes Google Apps-Skript geschrieben, das id
Informationen von einem Webdienst empfängt und abruft (ein Preis).
Ich verwende dieses Skript in einer Tabelle und es funktioniert einwandfrei. Mein Problem ist, dass sich diese Preise ändern und meine Tabelle nicht aktualisiert wird.
Wie kann ich erzwingen, dass das Skript erneut ausgeführt und die Zellen aktualisiert werden (ohne jede Zelle manuell zu durchlaufen)?
Antworten:
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:
Und wenn ich den Preis eines Artikels mit der ID 5 in eine Zelle eingeben möchte, verwende ich die folgende Formel:
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 .quelle
Ich weiß, das ist eine alte Frage. Diese Methode erfordert jedoch keine Benutzeraktion, außer eine Änderung vorzunehmen.
Was ich getan habe, war ähnlich wie bei tbkn23.
Die Funktion, die ich neu auswerten möchte, hat einen zusätzlichen nicht verwendeten Parameter, $ A $ 1. Der Funktionsaufruf ist also
Aber im Code ist die Funktionssignatur
Anstatt eine Aktualisierungsfunktion zu haben, habe ich die onEdit (e) -Funktion wie folgt verwendet
Diese Funktion wird immer dann ausgelöst, wenn eine Zelle in der Tabelle bearbeitet wird. Wenn Sie nun eine Zelle bearbeiten, wird eine Zufallszahl in A1 eingefügt. Dadurch wird die Parameterliste wie von tbkn23 vorgeschlagen aktualisiert, wodurch die benutzerdefinierte Funktion neu ausgewertet wird.
quelle
Dies ist sehr spät und ich weiß nicht, ob es nützlich wäre, aber tatsächlich gibt es hier Einstellungen, die Sie
NOW()
automatisch aktualisieren könnenquelle
NOW()
ist eine integrierte Funktion, keine benutzerdefinierte Funktion.Wenn sich Ihre benutzerdefinierte Funktion in einer bestimmten Spalte befindet, ordnen Sie Ihre Tabelle einfach nach dieser Spalte.
Die Ordnungsaktion erzwingt eine Aktualisierung der Daten, wodurch Ihre benutzerdefinierte Funktion für alle Zeilen dieser Spalte gleichzeitig aufgerufen wird.
quelle
Dies mag ein super alter Thread sein, kann aber für jemanden nützlich sein, der dies versucht, wie ich es gerade war.
Wenn man Lexis Skript so wie es ist ausarbeitet, scheint es mit den aktuellen Sheets nicht mehr zu funktionieren, aber wenn ich die Dummy-Variable als Parameter in meine Funktion einfüge (keine Notwendigkeit, sie tatsächlich innerhalb der Funktion zu verwenden), wird dies tatsächlich der Fall sein Erzwingen Sie, dass Google Sheets die Seite erneut aktualisiert.
Also, Deklaration wie: Funktion myFunction (firstParam, Dummy) und dann Aufruf wäre wie vorgeschlagen. Das hat bei mir funktioniert.
Wenn es störend ist, dass eine Zufallsvariable auf allen von Ihnen bearbeiteten Blättern angezeigt wird, können Sie auf einfache Weise auf ein Blatt beschränken:
quelle
Skriptlogik:
Snippet:
Lesen:
quelle
Wenn Sie eine benutzerdefinierte Funktion geschrieben und in Ihrer Tabelle als Formel verwendet haben, wird die Formel jedes Mal neu berechnet, wenn Sie die Tabelle öffnen oder eine referenzierende Zelle ändern.
Wenn Sie einfach weiter auf die Tabelle starren und möchten, dass sich ihre Werte ändern, sollten Sie einen zeitgesteuerten Trigger hinzufügen, der die Zellen aktualisiert. Lesen Sie mehr über Trigger hier
quelle