it-swarm.com.de

In den benutzerdefinierten Funktionen von Google Sheets wird manchmal "Laden ..." auf unbestimmte Zeit angezeigt

SPEZIFISCH FÜR: "NEUE" Google-Tabellen Nur.

Dies ist ein bekanntes Problem wie von Google in den neuen Tabellen hervorgehoben.

Probleme: Wenn Sie komplex schreiben* Benutzerdefinierte Funktionen in Google-Apps-Skript für Google Sheets, werden Sie gelegentlich in Zellen geraten, in denen ein rotes Fehlerfeld um die Zelle mit dem Text "Loading ..." angezeigt wird.

Google hat vorgeschlagen:

Versuchen Sie in diesem Fall, die Seite neu zu laden oder die Funktion umzubenennen und alle Verweise auf den neuen Namen zu ändern.

Für andere Entwickler, bei denen dieses Problem auftritt (und die den Fehler "Laden ..." nicht entgehen können), habe ich meine Ergebnisse in der folgenden Antwort beschrieben, wie Sie diese Probleme (mit Einschränkungen) konsistent überwinden können.


*Wir behandeln diese Frage als die kanonische Antwort für das unbestimmte Problem von Google Sheet "Fehler ... Daten werden geladen". Es ist nicht auf komplexe oder langsame Funktionen beschränkt.

19
Angelo

Ich hatte auch das unendliche Ladeproblem mit der folgenden Funktion.

// check if an item can be checked off
function checkedOff( need, have ) {
  var retStr = "nope";
  if( have >= need ){
    retStr = "yep";
  }
  return retStr;
};

Es stellt sich heraus, dass Sie kein abschließendes ";" Das Entfernen des Semikolons löste das Problem.

// check if an item can be checked off
function checkedOff( need, have ) {
  var retStr = "nope";
  if( have >= need ){
    retStr = "yep";
  }
  return retStr;
}

Das läuft wie erwartet.

6
Azmo

FWIW, ich bin gerade auf dieses Thema gestoßen und der Täter wurde ein getRange()-Anruf, der mehrere tausend Zeilen in ein Array zog. In regelmäßigen Abständen wurde die Meldung "Loading ..." angezeigt.

Ich habe das Problem gelöst, indem ich diesen Bereich in den Dokumentcache gestellt habe. Dies ist ein wenig kludgy, da der Cache nur Zeichenfolgen speichert, keine Arrays. Sie können ihn jedoch mit .split(',') wieder in ein Array zwingen, wenn Sie auf das Array zugreifen müssen. 

(In meinem Fall handelt es sich um ein einzelnes Array. Es gibt wahrscheinlich eine Möglichkeit, dies mit einem doppelten Array zu tun, indem entweder jede Zeile oder Spalte in einen eigenen Cache geschickt wird oder der Cache-Wert N Elemente auf einmal zurückgelesen wird, wobei jedes N zu seinem eigenen wird Array.)

Hier ist das relevante Bit aus meinem Code:

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("mySheet"); //search the "mySheet" sheet
// is the big list already in the cache?
var cache = CacheService.getDocumentCache();
var cached = cache.get("columnValues");
if (cached != null) {
   var columnValues = cached.split(','); // take the cached string and make it an array
} else { // it's not in the cache, so put it there
  var column = 1; // the column with your index
  var columnValues = sheet.getRange(2, column, sheet.getLastRow()).getValues(); // first row is header
  cache.put("columnValues",columnValues,60000); // this forces the array into a string as if you used .join() on it
}

Dies ist definitiv ein Fehler in Apps Script - getRange () sollte nicht ohne Timeout oder Fehlermeldung hängen bleiben. Aber zumindest gibt es eine Problemumgehung. Hier ist der Bug, den ich aufgetan habe dagegen, wo ich auch den kompletten Code.gs aus meinem Blatt gesteckt habe.

4
Aaron Weiss

Ich hatte auch das Problem, das Sie erklärt haben. Es scheint, dass es auf mehr als eine Weise verursacht werden kann.

Am Ende fand ich heraus, dass meine benutzerdefinierte Funktion diesen Fehler anzeigt, weil sie auf Daten eines =IMPORTRANGE()-Aufrufs basierte und dieser Aufruf fehlschlug.

Ich fand schließlich heraus, dass der Aufruf von =IMPORTRANGE() fehlgeschlagen war, weil ich vergessen hatte, die URL zu aktualisieren, die importiert wurde, als ich eine neue Version des importierten Blattes hochgeladen hatte. Es scheint, dass der Versuch, IMPORTRANGE aus einer verworfenen Datei durchzuführen, den unendlichen Fehler "Loading ..." verursachen kann.

2
bhekman

Eine Ursache: Berechtigungen müssen autorisiert werden.

Was das Problem angeht, so formulierten die Zellergebnisse einer benutzerdefinierten Funktion besser die angezeigte eklige vage Meldung "Loading ... Error: Loading data ..."}, und zwar in dem Fall, in dem alle Instanzen gleich sind Ein ähnlicher benutzerdefinierter Funktionsaufruf, der diesen Fehler anzeigt, besteht darin, dass Google Sheets Berechtigungen zum Ausführen des Skripts benötigt (häufig zusätzlich: bedeutet, dass es diese nicht benötigt hat). Statt also {entsprechend zu handeln: Dann fordert der Benutzer diese Berechtigungen auf diesen Fehler zurückgeben}, hängt Sheets stattdessen mit diesem widerlich vagen Fehler.

Zusätzliche Berechtigungen können von 1 oder mehr benötigt werden:

  1. Google App Scripts hat seitdem ihre Berechtigungsstruktur umgeschrieben - wie mir dieses Problem nun gerade passiert ist, laut meiner internen Notiz O80U3Z.
  2. Ihr Code oder eine Bibliothek, die er verwendet, hat Änderungen vorgenommen, um mehr Zugriff zu erfordern. In diesem Fall haben Sie jedoch eine viel bessere Chance, die Ursache dieses widerlichen vagen Fehlers zu erraten, sodass Sie hier hoffentlich nicht lesen werden.

Um das Problem zu beheben, habe ich meinen GAS-Tabellenkalkulationscode explizit ausgeführt, indem ich auf eine meiner benutzerdefinierten Menüfunktionen klickte und im Skript-Editor eine meiner benutzerdefinierten JS-Funktionen ausführte, insbesondere das "onOpen ()", da dies am umfassendsten ist. Der erste beförderte mich für tatsächlich neue Berechtigungen, über das Popup "Autorisierung erforderlich"
Die Anwendung "MM6ZBT (MM6Z83-Skript)" benötigt eine Berechtigung zum Ausführen. ", Obwohl onOpen () dies auch in Fällen tat, in denen GAS seine Berechtigungen überarbeitet, seit wir dieses Arbeitsblatt verwendet haben. Dann, als ich immer noch diesen "Loading ..." - Fehler bekam, lud ich die Webseite neu (so das Blatt), und zumindest für diese Fälle dieses ekelhaften vagen Fehlers war es weg und die Berechnungen funktionierten gut: - )

2

Wichtiger Tipp: Erstellen Sie mehrere Kopien Ihrer gesamten Tabelle, während Sie experimentieren. Ich habe 3 Google-Tabellenkalkulationen beschädigt und vollständig unzugänglich gemacht (in einer Aktualisierungsschleife festgehalten). Dies ist passiert, als ich mit benutzerdefinierten Funktionen experimentiert habe, so dass Sie gewarnt wurden!

Sie sollten eine oder mehrere der folgenden Möglichkeiten ausprobieren, um dieses Problem zu beheben:

  1. Versuchen Sie, wie von Google vorgeschlagen, die Tabelle erneut zu laden, die Funktion umzubenennen oder die Parameter in der Zelle zu ändern, um festzustellen, ob das Problem dadurch behoben wird.

  2. Umfassen Sie ALLE Ihre benutzerdefinierten Funktionen in einem Try-Catch-Block. Auf diese Weise können Sie Code-Probleme erkennen, die Sie möglicherweise nicht ordnungsgemäß getestet haben. Z.B:

    try { // Methoden } catch (ex) { zurückgeben "Exception:" + ex; }

  3. Wiederherstellen der alten Tabellen und Testen Sie Ihre Funktionen und prüfen Sie, ob ein anderer Fehler vorliegt, z. B. eine Endlosschleife oder ein ungültiges Datenformat. Wenn die Funktion in den alten Tabellen nicht funktioniert, funktioniert sie nicht in den neuen Tabellen und das Debuggen wird schwieriger.

  4. Stellen Sie sicher, dass KEINE Ihrer Parameter auf eine Zahl von mehr als 1 Million (1000000) verweist, erwarten kann oder jemals enthalten wird. Keine Ahnung warum, aber die Verwendung einer Zahl, die größer als eine Million ist, führt dazu, dass Ihre Funktion nicht ausgeführt wird. Wenn Sie müssen, bitten Sie die Eingabe in der Größe zu reduzieren (möglicherweise durch 1000 teilen oder nach M anstelle von mm fragen).

  5. Überprüfen Sie, ob numerische oder Fließkomma-Probleme vorliegen, bei denen Zahlen einen normalen Satz signifikanter Zahlen überschreiten können. Die neuen Tabellen scheinen mit Zahlen etwas unangenehm zu sein. Wenn Sie also sehr große oder sehr komplexe Zahlen erwarten, funktionieren Ihre Funktionen möglicherweise nicht.

Wenn keine der oben genannten Aufgaben funktioniert, wechseln Sie zu den alten Google-Tabellen und setzen die Arbeit fort. Wenn andere Einschränkungen oder Ursachen für die Ausführung von Funktionen auftauchen, schreiben Sie sie bitte für mich und andere Benutzer, die dies tun schwere g-sheet Benutzer!

1
Angelo

Ich kann keinen Kommentar hinzufügen, aber ich wollte ein Zeichen setzen, dass ich dieses Problem auch heute hatte, nachdem das Blatt 2 Jahre erfolgreich ausgeführt wurde, und ich fand diesen Thread auf der Suche nach Antworten. Ich habe die oben genannte Lösung verwendet, um die Funktion umzubenennen und den Namen an der richtigen Stelle im Arbeitsblatt zu ersetzen. Dies fiel mir leicht, da ich nur einmal die Funktion hatte, die in der Tabelle aufgerufen wurde. Sobald ich umbenannt/ausgetauscht wurde, funktionierte das Blatt jedoch wieder.

1
Jimmy

Add-Ons

Ich hatte zwei Add-Ons, und es wurde keine Funktion geladen.

Ich habe sie entfernt und alles ist gut!

1
Mirror318

Durch das Umbenennen der benutzerdefinierten Funktion wurde das Problem behoben. Zumindest jetzt.

0
Martin Hallén

Ich bin auf ein ähnliches Problem mit importrange aus einer anderen Tabelle gestoßen.

Eigentlich sollte man im Arbeitsblatt so etwas wie "Erlaubnis zum Zugriff" auf das Arbeitsblatt bekommen, an das man sich mit importrange wendet. Aber es blieb für immer dabei und alle Tipps wie Cache leeren usw. funktionierten nicht.

Irgendwann habe ich die Tabelle dupliziert und in dieser neuen Tabelle nach der Erlaubnis gefragt und alles funktioniert jetzt.

Daher kann es hilfreich sein, Ihre Tabelle zu duplizieren

Das war das Problem bei mir.
Aus irgendeinem Grund hat das Blatt die Blätter nicht verknüpft, weil es keine Erlaubnis hatte.
Beim Kopieren auf ein neues Blatt wurde die Erlaubnis eingeholt und es funktionierte.

0
ibrahim dandrea

Ich bin auf ein ähnliches Problem mit importrange aus einer anderen Tabelle gestoßen.

Eigentlich sollte man im Arbeitsblatt so etwas wie "Erlaubnis zum Zugriff" auf das Arbeitsblatt bekommen, an das man sich mit importrange wendet. Aber es blieb für immer dabei und alle Tipps wie Cache leeren usw. funktionierten nicht.

Irgendwann habe ich die Tabelle dupliziert und in dieser neuen Tabelle nach der Erlaubnis gefragt und alles funktioniert jetzt.

Daher kann es hilfreich sein, Ihre Tabelle zu duplizieren.

0
Richard

Mein App-Skript zum Abrufen von Daten aus meiner MSSQL-Datenbank wurde in Google Sheets, meinem Laptop-Browser, einwandfrei angezeigt, in der Android GS-App jedoch nicht angezeigt.

In diesem Thread sieht es so aus, als gäbe es eine Reihe von Problemen, die dies verursachen könnten, aber die Antwort von @ DestinyArchitect oben bezüglich: Berechtigungen schien die einfachste Lösung zu sein.

Beim Testen meines App-Skripts war die Freigabe für diese GoogleSheet-Datei deaktiviert. Sobald ich es in den Ordner meines Teams verschoben habe, in dem wir standardmäßig Freigabe aktiviert mit einigen Teammitgliedern haben, werden die MSSQL-Daten direkt auf dem GoogleSheet in meiner Android GS-App angezeigt.

Einfache Lösung, diesmal ...

0
Bobby P

Nur um Azmos Antwort hinzuzufügen ...

Ich habe tatsächlich alle nachgestellten Semikolons aus dem Code entfernt:

// check if an item can be checked off
function checkedOff( need, have ) {
  var retStr = "nope"
  if( have >= need ){
    retStr = "yep"
  }
  return retStr
}

Und entdeckte, dass Sie bei einer großen Reichweite auch die zulässige Anzahl von Aufrufen an die API ausschöpfen können.

Um dies zu umgehen, fügte ich meinem benutzerdefinierten Skriptaufruf eine IF THEN-Überprüfung hinzu.

Also statt:

=checkedOff(H10,H11)

Verwenden Sie so etwas, um vor der Ausführung nach einem ausgefüllten Feld zu suchen:

=if(H17<>"-",checkedOff(H10,H11),0)

0
d3m0n1cd4rkn355

Ich hatte auch den Fehler "Daten laden ...", aber keine der hier beschriebenen Korrekturen funktionierte für mich. Es schien nicht auf die hier beschriebenen Probleme zurückzuführen zu sein. In meinem Fall habe ich es auf ein bestimmtes Problem mit Gleitkommaoperationen eingegrenzt (es scheint mir ein echter Fehler in Google Sheets zu sein) und eine mögliche Abhilfe bei dokumentiert

Google Sheets/Apps-Fehler "Daten werden geladen": Gibt es eine bessere Problemumgehung?

Zusammenfassend (auf Wunsch von Kommentator Steve), wenn eine Zelle mit

   = myfunction(B10)

hat einen "loading data" -Fehler generiert, der für mich behoben werden konnte, indem das Argument in eine "value ()" - Funktion eingeschlossen wurde:

   = myfunction(value(B10))

das konvertiert die Zahl in Zelle B10 (die wie eine normale Zahl aussah, aber irgendwie Probleme verursachte) in eine normale Zahl, die gut funktioniert.

0
Greg Hammett