Erreur de Service: des feuilles de calcul sur Google Scripts
Portée
J'ai commencé à écrire un script qui va faire enchaîné les appels à l'API (avec une réponse JSON) et écrire le résultat dans une feuille de calcul.
Ce Qui Se Passe:
Une fois que j'ai le script de débogage de code, il fonctionne très bien, aucun problème majeur, mais une fois que je le lance à partir de la feuille de calcul le bouton lui-même (à partir du menu que j'ai créé), il s'exécute certaines étapes du script et que, pops, un : Service Error: Spreadsheet
sans autres détails de l'erreur.
Étrangeté
J'ai Commencé à "Journal" l'étape actuelle du processus d'une cellule de feuille de calcul, afin que je puisse suivre ses progrès tout en exécutant le script en dehors du débogueur.
Le problème est, une fois que j'ai déplacer certains "aléatoire" des morceaux tels que :
sheet.getRange("F2").setValue(currentPage);
le code a tendance à se disperser dans différents points.
Exemple De Code :
Vous pouvez trouver un code pour reproduire le problème ici : http://pastebin.com/HjmSwEYZ
Tout ce que vous avez à faire est de :
1 - Créer une nouvelle feuille de calcul sur Google Drive
2 - Hit Outils -> Éditeur de Script
3 - Créer un nouveau Script, collez le code dans et enregistrer
4 - Rechargez la feuille de calcul (F5) pour que le menu personnalisé apparaît maintenant "Guild Wars 2 Tracker"
5 - Cliquez sur le bouton et cliquez sur "afficher Tout"
De Sortie Souhaité:
Ce que ce code devrait (si ce n'était pas pour cette erreur) faire :
1 - l'Exécution d'une demande sur cette url : http://www.gw2spidy.com/api/v0.9/json/items/all/1 (qui sera de retour à la première page de Guild Wars 2 itens)
2 - Itère sur chaque page, l'analyse du json et écrit les valeurs renvoyées dans la feuille de calcul
Avertissement:
Désolé tous le "Journal" des messages dans la feuille. C'était une tentative désespérée pour suivre mes progrès, je sais que je devrais pas faire cela.
Merci d'avance
Mise à jour 1:
Après la création d'une autre feuille et coller le pastebin code dans son propre Projet de Script, j'ai pu courir sur l'interaction, mais qu'il a été. Cette fois donc, elle a soulevé une autre erreur : We're sorry, a server error occurred. Please wait a bit and try again.
OriginalL'auteur Marcello Grechi Lins | 2014-04-19
Vous devez vous connecter pour publier un commentaire.
J'aime ce que ellockie dit - je a (involontairement) d'avoir le même problème. J'essayais de gamme.de tri(8), mais à recueillir la gamme, j'ai utilisé:
Mais ce que je devrait ont utilisé était:
Le message d'erreur, comme de 5/1/2015, est encore très énigmatique, et n'offre pas plus de détails que le "Service d'erreur: les feuilles de calcul".
getDataRange
et de l'application de surgelés lignes (congelés lignes ne seront pas triées)OriginalL'auteur Dave Ghidiu
Marchello, j'ai couru dans le même problème aujourd'hui et je viens de trouver une réponse à aller faire un tour ici: https://code.google.com/p/google-apps-script-issues/issues/detail?id=3815 (voir n ° 4). L'idée est d'ajouter des lignes au bas de la feuille, ce qui devrait laisser les scripts de commencer à travailler à nouveau. Il ne fonctionne pas dans mon cas.
Cela a fonctionné pour mon cas. Un besoin de "suivre" [numérotées, blanchi] lignes pour fonctionner. Mais l'erreur est fantastique, nous avons marché sur server-side javascript...
OriginalL'auteur a-change
Vous pouvez obtenir des services erreurs de ce type lorsque vous accédez à une mauvaise plages, et l'erreur ne peut pas être soulevé jusqu'à ce qu'un accès ultérieur. Par exemple, si vous obtenez une
Range
qui fait référence à des colonnes qui n'existent pas (comme H si vous n'avez qu'A-E), ou les lignes qui n'existent pas (comme la ligne 10001 lorsque vous avez seulement 10000 lignes). Ce qui est noté dans les Apps Script bug Tracker: https://issuetracker.google.com/issues/68062620En ce qui concerne la source de votre problème, votre script est très unoptimized et ne suivent pas les Apps Script Les "Meilleures Pratiques" concernant l'utilisation de la feuille de Service. À savoir, vous devez utiliser le traitement par lots des opérations telles que
Range#setValues
fonctionnement d'écrire des blocs entiers, ou au moinsappendRow
pour ajouter chaque ligne (au lieu desheet.getRange(rowIndex, someColumn).setValue(oneValue)
). Ces méthodes d'ajouter des lignes pertinentes pour contenir les données si nécessaire.Un exemple de modification de votre code:
OriginalL'auteur tehhowch
Dans mon cas, j'ai eu des formules de "dynamique" des plages, c'est à dire
=sum(b2:b)
, dont je me souviens est citée comme un casuse de questions dans la nouvelle version de google feuilles de calcul.La correction de
sum(b2:b22)
(en s'assurant de la plage ne doit pas dépasser la feuille de la dernière ligne) a résolu le problème.OriginalL'auteur ellockie
Dans mon cas, j'obtiens cette erreur parce que j'ai demandé à une autre feuille de calcul pour faire le tri de données avec une gamme de 25 colonnes quand il n'y avait que 19 sur la feuille de calcul.
Dans ma sagesse j'ai pensé que je pourrais ranger la feuille de calcul par la suppression de l'onu-colonnes nécessaires après que j'ai écrit le script pour trier 25 colonnes au lieu d'utiliser getLastColumn - ne me demandez pas pourquoi.
OriginalL'auteur user3775095
J'ai le même problème à la raison comme ellockie mentionné: La plage dynamique dans une formule. Dans mon cas, j'ai été en utilisant un
=INDEX(B7:B,1)
pour obtenir la première cellule après mon titre de colonne, la cellule B7. J'ai été en utilisant ce parce que j'utilise un sript pour insérer une nouvelle cellule, changer toutes les données réelles et donc, j'ai besoin d'obtenir la première ligne de la valeur dans la cellule d'autres, peu importe, je déplacer la cellule. Je l'ai changer pour un=INDIRECT(CONCATENATE(CHARACTER(COLUMN()+64);ROW()+4))
de référence dynamiqueCHARACTER(COLUMN()+64)
donner la lettre de colonne. Remplacement de=INDEX(B7:B,1)
signifieB
ROW()+4
me donner le numéro de ligne que je veux, 4 lignes dont j'ai mis cette formule. remplacement de=INDEX(B7:B,1)
signifie7
OriginalL'auteur Niesteszeck
J'ai eu le même. Mais pensé que la cause racine, qui essayait de copier une cellule unique... POUVEZ-VOUS le CROIRE?
partie de script a été à essayer d'effacer une ligne unique, et cette foutue cellule était là.
J'ai essayé de copier une seule ligne et l'ensemble de la feuille de calcul se bloque. redémarré et a continué par la copie de cellules une par une et compris qu'une cellule vide les causes de l'accident. Supprimé la totalité de la colonne et tous les autres colonnes vides... alors traversé les portes du paradis!
maintenant, vous pouvez copier toute la ligne et que le script fonctionne très bien!!!!!
OriginalL'auteur Rafe