Pourquoi mon script arrête à la ligne 8?

Résolu/Fermé
wilbar_dhaga Messages postés 6 Date d'inscription mercredi 7 octobre 2015 Statut Membre Dernière intervention 13 octobre 2015 - Modifié par wilbar_dhaga le 7/10/2015 à 18:52
wilbar_dhaga Messages postés 6 Date d'inscription mercredi 7 octobre 2015 Statut Membre Dernière intervention 13 octobre 2015 - 13 oct. 2015 à 04:18
J'ai adapté un script pour ajouter des évènements à mon agenda depuis une google spreadsheet. Il fonctionne à merveille, sauf qu'il s'arrête inexplicablement à la ligne 8. J'ai beau relire le code je ne vois pas ce qui l'empêche de continuer.

function myFunction() {
  
}
var EVENT_IMPORTED = "AJOUTE"; // Ajoutera le texte "AJOUTE" dans la colonne G
var ss = SpreadsheetApp.getActiveSpreadsheet();

function onOpen() {
   var menuEntries = [{name: "Ajouter les événements à l'agenda", functionName: "importCalendar"}];
   ss.addMenu("Agenda1", menuEntries); // Pour ajouter un menu Agenda et un sous-menu "ajouter les événements" dans la feuille de calcul. 
}

function importCalendar() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var startcolumn = 2;  // Première colonne de prise en compte des données, soit la colonne B (numéro de la vache)
    var numcolumns = 7;  // Nombre de colonne
    var dataRange = sheet.getRange(startcolumn, 1, numcolumns, 7)   // Nombre de colonne contenant des données
    var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) { 
    var column = data[i];
    var att = "Surveiller ";
    var titre = column[1]; // no de vache
    var titreComplet = att+titre
    var SaigneLe = column[2];    // Date du saignement
    var SaillieOuPas = column[3];      // Saillie ou vide
    var Commentaires = column[4];          // Euh... Des commentaires
    var surveillerLe = column[5];      // Atendre chaleur ce jour là
    var eventImported = column[6];           // Colonne G - ajout a agenda
    var description = att+"la " + titre + Commentaires
    
    
    var setupInfo = ss.getSheetByName("agenda"); // Nom de la feuille de calcul contenant la nom de l'agenda
    var calendarName = setupInfo.getRange("A1").getValue(); // Référence de la cellule contenant le nom de l'agenda

    if (eventImported  != EVENT_IMPORTED && titre != "") {  // Evite les doublons dans l'agenda, si le texte AJOUTE est présent en G, l'événement n'est pas ajouté
    var cal = CalendarApp.openByName(calendarName);
          
      
     cal.createAllDayEvent(titreComplet, surveillerLe, {description : description}); // Création de l'événement dans l'agenda avec le titre, la date où surveiller la chaleur et les commentaires
   
      
      sheet.getRange(startcolumn + i, 7).setValue(EVENT_IMPORTED); // Nombre de colonne contenant des données
   
      SpreadsheetApp.flush();  
    }
  }
}


Merci de votre aide.
A voir également:

2 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié par Pitet le 8/10/2015 à 11:41
Salut,

Que dit la console d'erreur de ton navigateur (raccourci F12) ?

Bonne journée
0
wilbar_dhaga Messages postés 6 Date d'inscription mercredi 7 octobre 2015 Statut Membre Dernière intervention 13 octobre 2015
8 oct. 2015 à 15:48
J'ai peut-être mal expliqué mon problème...
Le script s'exécute parfaitement (presque) mais il ne va pas au-delà de la ligne 8 de la feuille de calcul à laquelle il s'applique.

Donc les événements s'ajoutent correctement à mon agenda mais impossible d'ajouter automatiquement ceux de la ligne 9 et au delà. Même si j'exécute le script manuellement rien à faire.
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
8 oct. 2015 à 15:57
Effectivement j'avais mal compris le problème.

Je ne connais pas l'API Spreadsheet mais il semble que l'erreur vienne d'une mauvaise utilisation de la méthode getRange(). Le 3ème paramètre correspond au nombre de ligne retourné par cette méthode, or tu as défini la variable numcolumns pour ce paramètre, soit 7 lignes retournées.
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getrangerow-column-numrows-numcolumns

Bonne journée
0
wilbar_dhaga Messages postés 6 Date d'inscription mercredi 7 octobre 2015 Statut Membre Dernière intervention 13 octobre 2015
8 oct. 2015 à 17:25
Les paramètres de la méthode getRange () sont pour les colonnes, mais j'avais testé quand même juste au cas où... Et c'est là tout ce qui m'embête. Rien dans le code ne réfère aux lignes (row en anglais).

J'ai pensé que peut-être ça viendrait du document lui même mais après en avoir fait un nouveau le script s'arrête toujours à la ligne 8.
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié par Pitet le 8/10/2015 à 17:34
Si tu essayes de modifier l'appel de cette méthode en dur comme ceci :
var dataRange = sheet.getRange(startcolumn, 1, 12, 7)   // Nombre de colonne contenant des données

Ton code devrait bien prendre en compte 12 lignes.

A toi ensuite de définir le nombre de lignes à prendre en compte, je ne sais pas comment tu récupères cette info.
0
wilbar_dhaga Messages postés 6 Date d'inscription mercredi 7 octobre 2015 Statut Membre Dernière intervention 13 octobre 2015
8 oct. 2015 à 17:53
Je veux bien essayer mais la encore tu me parles de colonnes (column) et pas de lignes (row)
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
9 oct. 2015 à 09:14
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getrangerow-column-numrows-numcolumns

getRange(row, column, numRows, numColumns)

Parameters
row Integer the starting row of the range
column Integer the starting column of the range
numRows Integer the number of rows to return
numColumns Integer the number of columns to return
0
wilbar_dhaga Messages postés 6 Date d'inscription mercredi 7 octobre 2015 Statut Membre Dernière intervention 13 octobre 2015
13 oct. 2015 à 04:18
Ok, j'ai finis par comprendre. Ça fonctionne. MERCI BEAUCOUP!
J'ai fixé un nombre de lignes arbitraire en attendant que je trouve comment faire pour que le script s'exécute toujours car je ne connais pas le nombre de lignes que contiendra la feuille.

Je devrai trouver aussi moyen d'accélérer l'exécution, parce qu'avec seulement 100 lignes ça prend déjà un petit moment. Mais ça ce sera peut-être pour un autre post.
0