Neue Google Tabellen benutzerdefinierte Funktionen manchmal die Anzeige "Loading..." auf unbestimmte Zeit
SPEZIFISCH FÜR: "NEUE" google sheets nur.
Dies ist ein bekanntes Problem wie hervorgehoben durch google, in der neue Blätter.
Fragen: Wenn Sie schreiben, komplexe* benutzerdefinierte Funktionen in google-apps-script für google sheets, Sie betreiben gelegentlich in Zellen, die Anzeige einer roten Fehler-Feld, um die Zelle mit dem text "Loading..."
Google vorgeschlagen hat:
Wenn dies Auftritt, versuchen Sie, die Seite neu zu laden oder die Umbenennung der Funktion und ändern Sie alle Referenzen auf den neuen Namen.
Jedoch auch für andere Entwickler, die dieses Problem Auftritt (und die sind nicht in der Lage zu entkommen, die "loading..." - Fehler), die ich geschrieben habe, meine Erkenntnisse in der Antwort unten auf, wie man in der Vergangenheit dieser (mit Einschränkungen) konsequent.
*Wir behandeln diese Frage als kanonische Antwort für Google-Blattes unbestimmten "Error... Loading data" - problem. Es ist nicht beschränkt auf komplexe und langsame Funktionen.
InformationsquelleAutor der Frage Angelo | 2013-12-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte auch das unendliche laden Problem mit der folgenden Funktion.
Stellt sich heraus, Sie sollten sich nicht einem abschließenden ";". Entfernen Sie das Semikolon das problem gelöst.
Läuft als man erwarten würde.
InformationsquelleAutor der Antwort Azmo
FWIW, ich lief einfach in dieser und der Täter endete als ein
getRange()
call gezogen, dass mehrere tausend Zeilen in einem array. In regelmäßigen Abständen würde, hing auf der "Loading..." - Meldung.Arbeitete ich um ihn herum, indem Sie diesen Bereich in der Dokument-cache. Es ist ein wenig notdürftigem, da der cache speichert nur die Saiten, nicht arrays, aber Sie zwingen kann, wieder in ein array mit
.split(',')
wenn Sie brauchen, um den Zugriff auf das array.(In meinem Fall ist es ein einzelnes array. Wahrscheinlich gibt es einen Weg, es zu tun mit einem double array, entweder durch senden jede Zeile oder Spalte aus, in seinen eigenen cache, oder das Lesen der cache-Wert zurück N Elementen in einer Zeit, jedes N immer seine eigene Reihe.)
Hier ist das entsprechende bit von meinem code:
Dies ist definitiv ein bug in den Apps Script -- getRange() sollte nicht hängen, ohne ein timeout oder eine Fehlermeldung. Aber zumindest gibt es einen workaround. Hier ist der Fehler, den ich geöffnet dagegen, wo habe ich auch den vollständigen code.gs von meinem Blatt.
InformationsquelleAutor der Antwort Aaron Weiss
Hatte ich auch das problem, dass Sie erklärt. Es scheint, dass es verursacht werden kann, die in mehr als einer Weise.
Landete ich zu finden, dass meine benutzerdefinierte Funktion wurde die Anzeige, dass Fehler, denn es beruhte auf Daten aus einer
=IMPORTRANGE()
nennen, und das rufen war zu scheitern.Schließlich fand ich, dass die
=IMPORTRANGE()
Anruf war ein Fehlschlag, weil ich vergessen hatte, um das URL zu aktualisieren, dass es den Import aus, als ich hochgeladen hatte eine neue version, die importiert-aus Blech. Es scheint, dass der Versuch, IMPORTRANGE aus eine gelöschte Datei kann die Ursache für das unendliche "Loading..." - Fehler.InformationsquelleAutor der Antwort bhekman
Ursache: Berechtigungen benötigen die Genehmigung.
Soweit {dieses problem, besser formuliert die Zelle Resultat(s) von einer benutzerdefinierten Funktion anzeigen der eklig-vage Meldung " Loading... Error: Daten werden geladen...'}, in der Tat in dem Fall, wo alle Instanzen der gleichen/ähnlichen benutzerdefinierten Funktion aufrufen die Anzeige dieses Fehlers ist, dass Google Sheets sind Berechtigungen erforderlich, um das Skript auszuführen (oft zusätzlich: Bedeutung in der Vergangenheit, die Sie nicht benötigen diese), so dass anstelle von {entsprechend zu reagieren: dann wird der Benutzer aufgefordert wird, für die diese Berechtigungen anderes zurückgeben, Fehler}, Blätter stattdessen hängt mit diesem eklig vage Fehler.
Zusätzliche Berechtigungen erforderlich sein können 1 oder mehr:
Zu beheben, habe ich explizit lief mein GAS-spreadsheet-code von beiden: Klick eine meiner benutzerdefinierten Menü-Funktionen und in den 'script editor', läuft eine meiner benutzerdefinierten JS-Funktionen, insbesondere die 'onOpen () -' da, die umfassendste. Die erste förderte mich in der Tat für neue Berechtigungen, über popup 'Genehmigung Erforderlich
Die Anwendung "MM6ZBT(MM6Z83 Skript)" Berechtigung wird benötigt, um zu laufen.', obwohl onOpen() haben auch dieses in Fällen von GAS überarbeitung der Berechtigungen, da wir benutzten das Blatt. Dann, als ich noch immer dieses "Loading..." - Fehler, ich reloaded die web-Seite (also das Blatt), und zumindest für diese Fälle eklig vage Fehlermeldung war Weg und die Berechnungen geklappt 🙂
InformationsquelleAutor der Antwort Destiny Architect
Wichtiger Tipp: Erstellen Sie mehrere Kopien der gesamten Tabelle, wie Sie Experimentieren. Ich habe 3 Tabellen in google Tabellen beschädigt und vollständig erbracht in zugänglichen (stuck in a refresh-loop). Dies geschah, wenn ich war das Experimentieren mit custom-Funktionen, so dass SIE sind GEWARNT WORDEN!
Werden Sie wollen, um zu versuchen, eine oder mehrere der folgenden Möglichkeiten, um dieses Problem zu beheben:
Vorgeschlagen von google, versuchen Sie erneut laden Sie das Arbeitsblatt oder re-Benennung der Funktion oder ändern der Parameter in der Zelle zu sehen, ob dies das Problem behebt.
Surround ALLE Ihre benutzerdefinierten Funktionen in einem try-catch-block. Dies wird helfen, code erkennen, Probleme, die Sie möglicherweise nicht getestet haben, richtig. Eg:
try{
//Methoden
}catch(ex){
return "Exception:"+ex;
}
Wieder die alten Platten und testen Sie die Funktionen und überprüfen Sie für eine andere Art von Fehler wie eine Endlosschleife oder ungültige Daten-format. Wenn die Funktion nicht funktioniert, in der alte Blätter, es wird nicht funktionieren, in der neue Blätter und es wird schwieriger sein, zu Debuggen.
Garantieren, dass KEINE Parameter finden, erwarten können, oder wird immer eine Zahl enthalten, die größer als 1 million (1000000). Keine Ahnung warum, aber mit einer Zahl größer als eine million, wie jeder parameter bewirkt, dass Ihre Funktion nicht ausführen. Wenn Sie haben, Fragen Sie die input-Größe reduziert werden (vielleicht dividieren Sie durch 1000, oder Fragen Sie für M statt mm).
Check für numerische oder floating-point-Probleme, in denen zahlen, können höchstens einen normalen Satz von signifikanten zahlen. Das neue Blatt zu sein scheint, ein wenig glitchy mit zahlen, so dass, wenn Sie erwarten, dass sehr große oder komplexe zahlen, Funktionen funktionieren möglicherweise nicht.
Schließlich, wenn keine der oben genannten arbeiten, wechseln Sie zu der alten google sheets und weiter arbeiten.
Wenn Sie irgendwelche anderen Einschränkungen oder Ursachen für die Funktionen nicht ausgeführt werden, bitte schreiben Sie unten bei mir und anderen Benutzern, die schwere g-Blatt-Benutzer!
InformationsquelleAutor der Antwort Angelo
Add-ons
Ich hatte zwei add-ons, und keine Funktion am laden war.
Habe ich entfernt, und alles ist gut!
InformationsquelleAutor der Antwort Mirror318
Kann ich nicht hinzufügen, einen Kommentar, aber ich wollte erwähnen, dass ich auch hatte dieses problem heute, nach 2 Jahren das Blatt erfolgreich ausgeführt, und ich fand, dass dieser thread basiert auf der Suche nach Antworten. Ich benutzte die Lösung, die oben bereitgestellt wird, benennen Sie die Funktion, und ersetzen Sie den Namen, wo immer angemessen im Blatt. Das war einfach für mich, da hatte ich nur einmal-Instanz die Funktion aufgerufen wird, in dem Blatt. Aber, sobald ich umbenannt/ersetzt, das Blatt begann die Arbeit wieder.
InformationsquelleAutor der Antwort Jimmy
Für mich, das umbenennen der benutzerdefinierten Funktion das problem gelöst. Zumindest für den Moment.
InformationsquelleAutor der Antwort Martin Hallén
Nur um Azmo 's Antwort...
Ich in der Tat entfernt alle nachgestellten Semikolon aus dem code:
Und entdeckt, dass, wenn Sie diese über einen großen Bereich können Sie auch max die annehmbare Anzahl Aufrufe der API.
Zu umgehen, fügte ich ein
IF THEN
überprüfen, um meine eigene script-Aufruf.Also statt:
=checkedOff(H10,H11)
Verwenden Sie so etwas wie dies zu überprüfen ist für einen besiedelten Bereich vor der Ausführung:
=if(H17<>"-",checkedOff(H10,H11),0)
InformationsquelleAutor der Antwort d3m0n1cd4rkn355