1
votes

Les coordonnées de la plage cible sont en dehors des dimensions lors de l'utilisation de getValue dans la boucle

J'ai un script d'application Google Sheet que j'exécute manuellement. Lors de l'exécution de la fonction clearForecast (), je reçois l'exception suivante:

Exception: les coordonnées de la plage cible sont en dehors du dimensions de la feuille. (ligne 30, fichier "Code")

function testFunc() {
  num_comments = sh.getSheetByName("clt").getRange("Y13").getValue();
}

La formule dans la cellule Y13 est:

= counta (X6: X12)

Cette exception se produit UNIQUEMENT quand il y a un nombre supérieur à 0. Si c'est 0, ou du texte, tout va bien.

Étrangement, j'ai créé une autre fonction:

XXX

Quand ceci est exécuté, aucune exception. J'ai passé des heures à essayer d'aller au fond des choses et toute aide est grandement appréciée.


2 commentaires

Spot sur. Ou fermer. J'avais une formule à droite des cellules de destination. Merci beaucoup!


Votre problème a-t-il été résolu? Si tel est le cas et que la solution n'est pas celle de ma réponse, envisageriez-vous d'afficher une réponse?


3 Réponses :


0
votes

Essayez :

function testFunc() {
  var locSheets = ["clt","chi","kan","mil","nnj","nva","nyc","sfl","uny"];
  for (var i = 0; i < locSheets.length; i++) {
    try {
    var numComments = sh.getSheetByName(locSheets[i]).getRange("Y13").getValue();
    }
    catch(e) {
      console.log(locSheets[i] + ', ' + locSheets[i].getMaxRows() + ', ' +  locSheets[i].getMaxColumns());
    }

}


0 commentaires

0
votes

Problème:

Vous essayez de copier la plage source vers une plage de destination qui n'existe pas.

Explication:

Regardons ce que dit l'erreur:

Les coordonnées de la plage cible sont en dehors des dimensions de la feuille.

La plage cible, dans ce cas, fait référence à destRange , vers laquelle vous souhaitez copier source via copyTo . Cette plage cible, indique l'erreur, ne fait pas partie des dimensions de la feuille de destination. Voyons comment la plage cible a été définie:

destSheet.insertRowAfter(destSheet.getLastRow());
source.copyTo(destRange, {contentsOnly: true});

Ici, la plage cible est définie comme la première cellule de la première ligne après la dernière ligne avec le contenu ( destSheet.getLastRow () + 1 ). Le fait que vous obtenez une erreur signifie que la dernière ligne avec le contenu ( destSheet.getLastRow () ) est également la dernière ligne de la feuille (il n'y a pas de lignes vides après la dernière ligne avec le contenu) .

Solution:

Avant de copier la plage, insérez une ligne vide dans la feuille de destination pour vous assurer qu'il y a une ligne vide à la fin de la feuille. Vous pouvez utiliser insertRowAfter , par exemple, simplement avant copyTo :

destRange = destSheet.getRange(destSheet.getLastRow()+1,1);

Remarque :

  • Si Y13 n'est pas un nombre positif, aucune exception ne se produit car le code n'entre jamais dans le bloc if : if (numComments> 0) {... } .

0 commentaires

0
votes

L'exception était le résultat d'une formule existant dans la plupart des cellules de droite de la plage dans laquelle j'essayais d'écrire.

Une fois supprimé, il a fonctionné comme prévu.


2 commentaires

Je ne sais pas si je comprends comment une formule peut provoquer cette erreur. Cette erreur signifie essentiellement que la plage de destination dans laquelle vous souhaitez copier n'existe pas complètement (certaines de ses lignes ou colonnes n'existent pas). Pouvez-vous nous en dire plus?


Sûr. La feuille de destination a été structurée pour remplir les cellules les plus à gauche avec les données du script. la plupart des cellules de droite contenaient des formules pour combiner les données de deux cellules vers la gauche. toute cellule contenant des données dans les lignes en cours de mise à jour entraînait une erreur. J'espère que cela a du sens.