Pourquoi mon script arrête à la ligne 8?
Résolu
wilbar_dhaga
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
wilbar_dhaga Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
wilbar_dhaga Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
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.
Merci de votre aide.
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:
- Pourquoi mon script arrête à la ligne 8?
- Clé windows 8 - Guide
- Aller à la ligne excel - Guide
- Partager photos en ligne - Guide
- Script vidéo youtube - Guide
- Mixcraft 8 - Télécharger - Création musicale
2 réponses
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
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
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.
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.
Si tu essayes de modifier l'appel de cette méthode en dur comme ceci :
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.
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.
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
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
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.
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.
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.