Les nouvelles fonctions personnalisées de Google Sheets affichent parfois" Chargement... " indéfiniment.

SPECIFIC FOR:"NOUVELLE" des feuilles de calcul google une seule.

C'est un problème connu comme souligné par google dans les nouvelles feuilles.

Questions: Si vous écrivez complexe* fonctions personnalisées dans google-apps-script pour Google sheets, vous rencontrerez de temps en temps des cellules qui affichent une zone d'erreur rouge autour de la cellule avec le texte "Chargement..."

Google a suggéré:

Si cela se produit, essayez de recharger la page ou renommer la fonction et changer toutes les références au nouveau nom.

Cependant pour les autres développeurs qui éprouvent ce problème (et qui sont incapables d'échapper au "chargement..."erreur), j'ai écrit mes conclusions dans la réponse ci-dessous sur la façon de surmonter ceci (avec des limites) de manière cohérente.


*nous traitons cette question comme le réponse canonique pour L'erreur "indéfinie" de Google Sheet... Chargement des données" problème. Ce n'est pas limité aux fonctions complexes ou lentes.

17
demandé sur Community 2013-12-21 16:19:44

9 réponses

j'ai aussi eu le problème de chargement infini avec la fonction suivante.

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

il S'avère que vous ne devriez pas avoir un arrière ";". La suppression du point-virgule a résolu le problème.

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

ceci fonctionne comme on pourrait s'y attendre.

5
répondu Azmo 2015-04-10 07:31:52

FWIW, je viens de tomber sur ce et que le coupable s'est terminée par une getRange() appel qui a tiré plusieurs milliers de lignes dans un tableau. Périodiquement il serait accroché sur le " chargement..." message.

j'ai contourné cela en mettant cette portée dans la cache de document. C'est un peu kludgy parce que le cache ne stocke que des Chaînes, pas des tableaux, mais vous pouvez le forcer à revenir dans un tableau en utilisant .split(',') quand vous avez besoin d'accéder au tableau.

(Dans mon cas, c'est un tableau unique. Il y a probablement une façon de le faire en utilisant un double tableau, soit en envoyant chaque ligne ou colonne dans son propre cache, soit en lisant la valeur cache en arrière N articles à la fois, chaque N devenant son propre tableau.)

Voici pertinentes peu de mon 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
}

il s'agit certainement d'un bug dans le Script Apps -- getRange() ne devrait pas être pendu sans un message de timeout ou d'erreur. Mais au moins, il y a une solution de contournement. Ici le bug que j'ai ouvert contre cela, où j'ai aussi mis le code complet.g de ma feuille.

4
répondu Aaron Weiss 2015-12-14 16:14:26

j'ai fini par trouver que ma fonction personnalisée affichait cette erreur parce qu'elle s'appuyait sur des données d'un =IMPORTRANGE() appel, et cet appel échouait.

j'ai finalement trouvé que le =IMPORTRANGE() call était en panne parce que j'avais oublié de mettre à jour l'URL qu'il importait à partir du moment où j'avais téléchargé une nouvelle version de cette importation-à partir de la feuille. Il semble que d'essayer de IMPORTRANGE à partir d'un fichier saccagé peut causer le chargement infini"..." erreur.

2
répondu bhekman 2016-03-03 15:11:15

Une seule cause: les Autorisations d'avoir besoin de l'autoriser.

en ce qui concerne {ce problème, mieux phrasé la cellule résultat (s) d'une fonction personnalisée affichant le dégoût-vague message ‘Chargement... Erreur: chargement de données...'}, en effet dans le cas où toutes les instances de la même/similaire fonction personnalisée appel affichant cette erreur, est que Google Sheets a besoin de permissions pour exécuter le script( souvent en plus: ce qui signifie dans le passé qu'il n'avait pas besoin de ces), donc au lieu de {agir de manière appropriée: alors en demandant à l'utilisateur ces permissions, sinon en retournant cette erreur}, Sheets est suspendu avec cette erreur d'une vague écœurante.

autorisations Supplémentaires peuvent être nécessaires à partir de 1 ou plus:

  1. Google App Scripts a depuis réécrit leur structure de permission --comment ce problème vient de m'arriver, par ma note interne O80U3Z.
  2. votre code ou une bibliothèque qu'il utilise a fait des changements pour exiger plus d'accès ...mais dans ce cas, vous avez une bien meilleure chance de devinant la cause de cette erreur écœurante et vague, donc j'espère ne pas lire ici.

pour corriger, j'ai explicitement lancé mon code de tableur de gaz à la fois: en cliquant sur une de mes fonctions de menu personnalisé et, dans le ‘script editor’, en exécutant l'une de mes fonctions js personnalisé notamment le ‘onOpen()’ puisque c'est le plus complet. Le premier m'a promu pour en effet de nouvelles permissions, via popup ' autorisation Required

l'application "MM6ZBT(script MM6Z83)" nécessite une autorisation exécuter.", bien que onOpen () l'ait fait aussi dans les cas de gaz révisant ses permissions puisque nous avons utilisé cette feuille. Puis, comme je recevais encore ce Chargement..."erreur, j'ai rechargé la page web (donc la feuille), et, au moins pour ces cas de cette dégoûtante vague d'erreur, il a disparu et les calculs a bien fonctionné :-)

2
répondu Destiny Architect 2016-05-31 03:47:54

conseil Important: créez plusieurs copies de votre feuille de calcul entière pendant que vous expérimentez. J'ai eu 3 tableurs google corrompus et rendus complètement in-accessible (coincé dans une boucle de rafraîchissement). Cela s'est produit lorsque j'expérimentais avec des fonctions personnalisées de sorte que vous avez été avertis!

Vous voulez essayer une ou plusieurs des méthodes suivantes pour résoudre ce problème:

  1. comme suggéré par google, essayez de recharger la feuille de calcul ou de renommer la fonction ou la modification des paramètres dans la cellule pour voir si cela résout le problème.

  2. entourez toutes vos fonctions personnalisées dans un bloc try-catch. Cela vous aidera à détecter les problèmes de code que vous n'avez peut-être pas testés correctement. Par exemple:

    essayer{ //méthode } catch (ex){ retour "Exception:" +ex; }

  3. revenir aux anciennes feuilles et testez vos fonctions et vérifiez tout autre type d'erreur tel qu'une boucle infinie ou des données invalides format. Si la fonction ne fonctionne pas dans les vieux draps, il ne fonctionnera pas dans les feuilles, il sera plus difficile à déboguer.

  4. assurez-vous QU'aucun de vos paramètres ne se réfère à, ne peut s'attendre à ou ne contiendra jamais un nombre supérieur à 1 million (1000000). Aucune idée de pourquoi, mais utiliser un nombre supérieur à un million comme paramètre causera l'échec de votre fonction à exécuter. Si vous devez, demandez à l'entrée d'être réduite dans la taille (peut-être diviser par 1000 ou Demander M au lieu de mm).

  5. vérifier s'il s'agit d'émissions numériques ou à virgule flottante dont les nombres peuvent dépasser un ensemble normal de chiffres significatifs. Les nouvelles feuilles semblent être un peu glitchy avec des nombres donc si vous attendez des nombres très grands ou très complexes, vos fonctions peuvent ne pas fonctionner.

enfin, si aucun des éléments ci-dessus ne fonctionne, passez aux anciennes feuilles google et continuez à travailler. Si vous trouvez d'autres limitations ou causes pour les fonctions à ne pas exécuter, s'il vous plaît écrire ci-dessous pour moi et les autres utilisateurs qui sont de gros g-feuille utilisateurs!

1
répondu Angelo 2013-12-21 12:19:44

Add-ons

j'avais deux add-ons, et aucune fonction ne se chargeait.

je les ai enlevés, et tout va bien!

1
répondu Mirror318 2016-11-03 07:46:43

Je ne peux pas ajouter de commentaire, mais je voulais faire remarquer que j'ai aussi eu ce problème aujourd'hui, après 2 ans de fonctionnement de la feuille avec succès, et j'ai trouvé ce thread basé sur la recherche de réponses. J'ai utilisé la solution fournie ci-dessus pour renommer la fonction, et remplacer le nom là où approprié dans la feuille. C'était facile pour moi, puisque je n'ai eu qu'une fois l'instance de la fonction appelée dans la feuille. Mais, dès que j'ai renommé/remplacé, la feuille a recommencé à fonctionner.

1
répondu Jimmy 2017-02-23 18:29:20

pour moi, renommer la fonction personnalisée a résolu le problème. Du moins pour le moment.

0
répondu Martin Hallén 2016-06-17 20:24:03

juste pour ajouter à la réponse D'Azmo...

j'ai en fait supprimé tous les demi-colons du code:

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

et découvert, que lorsque vous faites ceci sur une large plage, vous pouvez également maxer le nombre acceptable d'appels à L'API.

Pour la contourner, j'ai ajouté un IF THEN vérifiez mon appel de script personnalisé.

Donc au lieu de:

=checkedOff(H10,H11)

Utiliser quelque chose comme ceci pour vérifier un rempli avant exécution:

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

0
répondu d3m0n1cd4rkn355 2018-04-25 08:56:33