samedi 10 juillet 2021

JavaScript appliqué à Google Sheet

Objectif

Permettre aux coordos d'éditer des relevés individuels en partant d'un Google Sheet. L'idée est de faire une matrice de relevé sur une autre feuille puis d'utiliser un script permettant de générer un fichier pdf en partant des données du tableau de synthèse. 

Liens

Lien article principe

https://websitesetup.org/wp-content/uploads/2020/09/Javascript-Cheat-Sheet.pdf

https://riptutorial.com/Download/google-apps-script-fr.pdf

Scripts

Example on how to export a Google sheet to various formats, includes most PDF options. Ce script fonctionne et génère un pdf du classeur.
Attention, personnalisation du ssID en fonction de votre Google Sheet comme expliqué ligne 4.

https://gist.github.com/Spencer-Easton/78f9867a691e549c9c70


Classeur gestion des CCF et impression des relevés individuels

Disposition des données

  • Soit une feuille "Synthèse" contenant les données des étudiants (enregistrement par ligne). Cette feuille DOIT contenir en bas une zone de filtre contenant les infos d'un des candidats.
  • Soit une autre feuille "Matrice releve Etudiant" que l'on peut mettre en forme comme bon nous semble/ Par contre les données proviennent de la fameuse zone de filtre de la feuille "Synthèse".

Le classeur est ici, faites en une copie dans votre DRIVE. Attention, votre copie du classeur n'aura pas la même URL donc vous devez modifier le script (voir la vidéo).

Lien vers le classeur Google Sheet contenant la macro

https://docs.google.com/spreadsheets/d/1qk82SeU2yvnddKzPnaO8p_-HouHIrbqhhsXiXefuGog/edit?usp=sharing

En faire une copie dans votre drive, si possible d'un domaine  Gsuite Education (pour nous c'est @nta.com) mais vous pouvez le tester sur un drive perso.

Principe

Le script se lance via le menu Outils/Macro de votre Google Sheet et porte le nom "releve etudiant". Il peut se lancer par le clavier.
L'esprit du script est de :
  • Copier ligne par ligne les données étudiants sur la ligne 52 de la feuille Synthèse
  • Basculer sur la feuille Matrice
  • Générer un pdf  à la racine de votre drive
et recommencer ;)))



Copie du script de la macro

  • Attention, si compte gmail perso, vous aurez peut être un message indiquant que le délai est dépassé
  • Solution, modifiez la temporisation de la dernière ligne - ici 5000
    Utilities.sleep(5000); // temporisation pour éviter message erreur googledoc n°429
  • Notez que si vous utilisez un compte entreprise ou education, cette limite ne semble pas apparaître 
------------------------------------------------- script ------------------------------------------
/** source adaptée de Spencer-Easton et https://thierryvanoffe.com/   
 * Surement amendable, 
 * pierre troulet
*/

// Objectif - générer un pdf en partant d'un tableau recap des notes d'une classe

function releveetudiant() {
  // ssID et gid à personnaliser https://docs.google.com/spreadsheets/d/1qk82SeU2yvnddKzPnaO8p_-HouHIrbqhhsXiXefuGog/edit#gid=213741352
  // gid = n° de la feuille, à saisir ligne 41 pour n'avoir que le relevé de note
  var ssID = "1qk82SeU2yvnddKzPnaO8p_-HouHIrbqhhsXiXefuGog";
  // active classeur
  var spreadsheet = SpreadsheetApp.getActive();
  //bascule sur feuille Synthèse
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Synthèse'), true);
  // nombre de fois qu'il faut faire la boucle = nombre d'étudiants dans la liste
  var n=spreadsheet.getRange('B50').getValue();
  
  // boucle de 0 à n-1
  for (var i=0;i<n;i++){
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Synthèse'), true);// feuille synthese
    spreadsheet.getRange('A52').activate(); // avtivation de la cellule A52 car utilisation ref relative en dessous 
    spreadsheet.getCurrentCell().offset(-45+i, 0,1,33).copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Matrice releve Etudiant'), true);
    /**impression de la feuille matrice via l'imprimante par défaut du poste */
    // generation des pdf//
    var nom=spreadsheet.getRange('B4').getValue();
    var prenom=spreadsheet.getRange('B5').getValue();
    var classe=spreadsheet.getRange('C2').getValue();
    var promotion=spreadsheet.getRange('C3').getValue();
    var docName = promotion+"-"+classe+"-"+nom+"-"+prenom ;
    var url = "https://docs.google.com/spreadsheets/d/"+ssID+
                                                        "/export"+
                                                        "?format=pdf&"+
                                                        "size=7&"+
                                                        "fzr=true&"+
                                                        "portrait=true&"+
                                                        "fitw=true&"+
                                                        "gridlines=false&"+
                                                        "printtitle=true&"+
                                                        "sheetnames=true&"+
                                                        "pagenum=CENTER&"+
                                                        "attachment=true&"+
                                                        "gid=213741352";
                                                        
                                                        
    var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};
    var response = UrlFetchApp.fetch(url, params).getBlob();
    
    // save to drive
    
    fichier=DriveApp.createFile(response); //creation des fichiers nom export
    fichier.makeCopy(docName); //creation d'une copie avec nom de l'étudiant dans le nom du fichier
    fichier.setTrashed(true); // suppr du fichier export
    
    Utilities.sleep(5000); // temporisation pour éviter message erreur googledoc n°429

  }
  
}

Aucun commentaire:

Enregistrer un commentaire

Tout commentaire nous engage ;)