Projet google form/apps script

Bonjour à tous,

Je souhaites créer et renommer avec apps script un nouveau fichier selon des critères et y coller à l'intérieur les photos que je renomme de la même manière avec apps script.

J'ai trouvé ce code qui me permet de renommer les photos mais je ne trouve pas comment créer le nouveau fichier et le donner en destination pour les photos.

idéalement les supprimer dans le fichier source et si possible de my drive.

Merci de votre aide.

Je vous joins le code en txt je ne peux pas le posté directement.

16rename-reponse.txt (1.27 Ko)

Bonjour,

créer et renommer avec apps script un nouveau fichier selon des critères et y coller à l'intérieur les photos

quel type de fichier ? sheets, doc, slides, ... ou bien n'est-ce pas tout simplement un dossier de ton drive ?

Bonjour Steelson,

Oui erreur de langage désolé, j'ai trouvé comment créer et renommer un nouveau dossier.

Mais,

Le projet plus précisément :

Je pars d'un form (à partager), sur lequel j'intègre des photos, le Top serait de directement faire fonctionner le script sur le form, mais je n'y parviens pas, donc j'ai une étape intermédiare qui consiste à récupérer dans le dossier du form les photos pour les renommer et en même temps les déplacer dans un nouveau dossier lui aussi renommer.

Je sais pas si c'est bien clair...

Merci de ton intérêt.

Re Steelson,

Le code en complément en remplacant G O O G L E sinon ça passe pas.

2 soucis :

Pour les renommages de photos ça marche nickel même si plusieurs réponse.

Mais pas pour la création de dossier, il n'en créer qu'un et si il est déjà existant j'ai une erreur.

Apres dans ces nouveaux dossier je voudrais y déplacer, même couper/coller du dossier d'origine vers ces derniers.

Si tu as une piste.

Merci

function RenameResponses() {
var form = FormApp.openById('1MyMf-SU-KTqrh0Zt2JmdzBf22B6tRRTwbmVPzN_IWRA'); //Copy_and_paste_your_FormId_here
var formResponses = form.getResponses();
var baseString = 'https://d r i v e.g o o g l e .com/file/d/';
var endString = '/view?usp=drivesdk';

var folder1 = DriveApp.getFolderById('1dG0_7JJgyWYtCn8KIHIdgZXkVCXPlBYtdkjvlFYslZofRV2T0tVYe9Cvsvd0KPRLNtkAAF2L'); //Copy_and_paste_your_DriveId_here
var files = folder1.getFiles();

  while (files.hasNext()) {
    var file = files.next();
    for (var i = 0; i < formResponses.length; i++) {
      var formResponse = formResponses[i];
      var itemResponses = formResponse.getItemResponses();
      var itemResponse1 = itemResponses[2];
      var itemResponse2 = itemResponses[3];

      var itemResponsePhoto1 = itemResponses[6];
            var photoID = itemResponsePhoto1.getResponse();
     var newName1 = itemResponse1.getResponse() + "_" + itemResponse2.getResponse() + "_AERIENS" ;
     var url = baseString  + photoID + endString;
     var urlCheck = file.getUrl();
     if ( url == urlCheck) {
       var modName1 =  newName1 + ".jpg";
       file.setName(modName1);
   } 
   }

  var namefolder = itemResponse1.getResponse() + "_" + itemResponse2.getResponse()
  var id;
  var dossiers = DriveApp.getFoldersByName(namefolder);
  if (dossiers.hasNext()) {
    var dossier = folders.next();
    id = dossier.getId(); }
  else {
    var dossier = DriveApp.createFolder(namefolder);
    id = dossier.getId();
  }
  return id; 
   }  
}

Je pars d'un form (à partager),

je regarderai plus en profondeur demain

mais si tu pars d'un (google) form, tu peux enclencher directement un script avec onFormSubmit(e)

Ok super je recherche aussi demain sur cette piste, car au moins ce sera plus simple sans étape intermédiaire.

Merci.

et pour les dossiers, j'ai cette fonction générique

function getFolderId(name){
  var id;
  var dossiers = DriveApp.getFoldersByName(name);
  if (dossiers.hasNext()) {
    var dossier = dossiers.next();
    id = dossier.getId(); }
  else {
    var dossier = DriveApp.createFolder(name);
    id = dossier.getId();
  }
  return id;
}

on a la même mais j'ai le sentiment qu'elle est mal intégrée à ton script ... je regarderai demain si entre temps tu n'as pas la solution

N'ayant pas la visibilité sur tout le projet, je vais répondre sur 2 points plus précis

  1. onFormSubmit
  2. création d'un dossier et transfert

onFormSubmit

avec ceci, tu peux accéder aux données directement lors de la réception des réponses du formulaire dans la feuille de collecte des réponses

function onFormSubmit(e) {
  var responses = e.namedValues;
  var monChoix = responses['leTitreDeLaQuestion'] 
}

tu peux aussi indiquer une information supplémentaire ... ici je vais indiquer en condensé toutes les réponses

function onFormSubmit(e) {
  var responses = e.namedValues;
  var sheet = SpreadsheetApp.getActiveSheet();
  var row = sheet.getActiveRange().getRow();
  var column = e.values.length + 1;
  sheet.getRange(row, column).setValue(JSON.stringify(responses));
}

puisque responses est un json

Création d'un dossier et transfert

Pour déplacer un fichier dont on connait l'id vers un dossier (s'il n'existe pas il est créé)

function myFunction() {
  DriveApp.getFileById('1Vd-M9LQ_q0qJe0tnqLUXLi3WenNtWdOP').moveTo(DriveApp.getFolderById(getFolderId('testNouveauDossier')))
}

function getFolderId(name){
  var id;
  var dossiers = DriveApp.getFoldersByName(name);
  if (dossiers.hasNext()) {
    var dossier = dossiers.next();
    id = dossier.getId(); }
  else {
    var dossier = DriveApp.createFolder(name);
    id = dossier.getId();
  }
  return id;
}

Bonjour Steelson,

Ca fait pas mal d'information, je ne suis pas certain d'avoir bien compris, je supprime le code existant en le remplaçant par onformsubmit ?

Idéalement :

je créer le dossier si il n'existe pas en le renommant avec les item réponse que je souhaites

ensuite je le donne en destination pour y envoyer les répoonses (photos) en le renommant avec les item réponse que je souhaites également

Je ne sais pas vraiment comment le mettre en forme

Si tu peux m'aider ?

Merci

Je fais des essaies de mon côté pour essayer de comprendre.

Peux-tu partager ton fichier et ta form ? sinon comme ici je travaille en théorique.

Re,

Comment je fais pour partager ici ?

J'ai résolue le problème de création de fichier.

Maintenant je cherche à déplacer les photos renommer dans le dossier créer associé.

Je n'arrive pas à utiliser submitform

Je reviens avec mon ancien pseudo dans quelques minutes TONY83470

Re,

Je ne parviens pas à me reloguer avec mon ancien pseudo du coup je conserve celui ci.

Comment je peux partager ?

6lien-ggs.txt (414.00 Octets)

merci

maintenant que j'ai une vision d'ensemble, je vais me faire un fichier test

si je comprends bien, les photos reçues doivent être renommées et transférées dans un dossier appelé "NOM DU SITE_NUMERO DU SITE" et la photo s'appellera du nom du titre de la question comme S1 4G, S1 5G, AERIENS ...

je vais m'y pencher ce soir ....

Exact, ensuite je développe le reste du formulaire ce sera que du copier coller en gros pour le code.

Idéalement si ce la peux le faire directement au niveau du submit formulaire sans activer la macro ce serait TOP.

Et une chose que je ne trouve pas comment faire, quand la répose contient plusieurs photo (si c'est faisable) évidement.

Merci pour ton aide

À tester

Définis un déclencheur sur cette fonction pour l'autoriser à écrire dans le drive.

function onFormSubmit(e) {
  var responses = e.namedValues;
  var liste = ['AERIENS (vue générale)','S1 4G','S1 5G','S2 4G','S2 5G','S3 4G','S3 5G']
  var nomDossier = responses['NOM DU SITE'][0] + '_' + responses['NUMERO DU SITE'][0]
  var regExp = new RegExp("id=(.*)");
  try {
    // pour chaque élément de la liste
    liste.forEach(elem => {
      // si l'image a été importée
      if (responses[elem][0] != '') {
        var photoId = regExp.exec(responses[elem][0])[1]
        var file = DriveApp.getFileById(photoId)
        // j'affecte le nom du titre de la question
        file.setName(elem)
        // je déplace dans le dossier
        file.moveTo(DriveApp.getFolderById(getFolderId(nomDossier)))
      }
    })
  } catch (err) {
    // en cas d'erreur, je donne le motif à droite de l'enregistrement
    var sheet = SpreadsheetApp.getActiveSheet();
    var row = sheet.getActiveRange().getRow();
    var column = e.values.length + 1;
    sheet.getRange(row, column).setValue(err);
  }
}

function getFolderId(name) {
  var id;
  var dossiers = DriveApp.getFoldersByName(name);
  if (dossiers.hasNext()) {
    var dossier = dossiers.next();
    id = dossier.getId();
  }
  else {
    var dossier = DriveApp.createFolder(name);
    id = dossier.getId();
  }
  return id;
}
Rechercher des sujets similaires à "projet google form apps script"