Projet google form/apps script

Hello,

J'ai pas encore tester je débute vraiment avec le langage de apps script, mais en première lecture je retrouve des éléments VBA que je n'aurais pas osé tester, même si le langage est proche.

Je tente ça et je reviens vers toi.

Mais franchement ici que des fous (dans le bon sens du terme) j'ai souvent trouvé réponse vous êtes tous démoniaque de connaissance j'adore.

Merci encore je tente ça desuite.

Alors, il ne se passe rien au submit, j'ai donc lancer la macro.

erreur ligne 3

18:07:01ErreurTypeError: Cannot read property 'namedValues' of undefinedonFormSubmit@ Code.gs:3

 var responses = e.namedValues;

J'ai l'impression car je débute que le form n'est pas identifié..

non ?

même si le langage est proche.

ok ce sont des langages objet, mais ils sont quand même éloignés, même irréconciliables !

Alors, il ne se passe rien au submit, j'ai donc lancer la macro.

erreur ligne 3

18:07:01ErreurTypeError: Cannot read property 'namedValues' of undefinedonFormSubmit@ Code.gs:3

 var responses = e.namedValues;

il ne faut pas lancer le script à partir de l'éditeur de script, dans ce cas e n'est en effet pas défini

il se lancera automatiquement quand une réponse à la form parviendra au fichier GSheets dans lequel tu auras mis le script

attention : il faut définir un déclencheur

LOL

ok ce sont des langages objet, mais ils sont quand même éloignés, même irréconciliables !

C'est le cas le script est intégrer dans le sheet qui recoit les informations, mais rien ne se passe et code erreur si je lance le script.

24/06/2022 18:18:12 Circet Tuhhu Fjuyu 34789 PYLONE OUTDOOR

Dans déclencheur tu entends un genre de "if change vba" ?

En historique, "j'ai" développer avec DAN qui est un monstre un bel outils VBA qui fonctionne très bien sous le profil TONY83470 (en fait c'est presque DAN qui à tout fait) mais il m'a bien expliqué pour que je comprenne et continue à développer.

Si tu veux tu peux regarder c'est lui aussi un génie.

Dans déclencheur tu entends un genre de "if change vba" ?

clique sur l'horloge à gauche

ensuite sur ajouter un déclencheur en bas à droite

renseigne comme suit

valide

image

Bonjour,

J'ai créer le déclencheur, mais rien ne se passe, si j'exécute la macro toujours la même erreur.

Pourtant le taux d'erreur est de 0% ... j'avais essayé sur un simili projet reprenant tes indications et cela fonctionnait correctement. Cela veut dire que le script se déroule.

Toutefois le dernier essai indique en colonne O TypeError: Cannot read property '0' of undefined donc on progresse, reste à savoir sur quelle ligne.

En fait, tu as renommé les questions dans ta form ... il faut que le nom des questions pouvant comporter un photo soit exactement (aux espaces et majuscules près) ici :

var liste = ['PHOTO AERIENS (vue générale)','PHOTO S1 4G','PHOTO S1 5G','PHOTO S2 4G','PHOTO S2 5G','PHOTO S3 4G','PHOTO S3 5G']

As-tu a minima un dossier créé (AERIENS (vue générale) et une photo transférée dedans ?

Pour tenir compte des changements de noms, ajouts, suppressions, on peut aussi faire ceci

var liste = getImageForm()

avec

function getImageForm() {
  const url = SpreadsheetApp.getActiveSpreadsheet().getFormUrl()
  const form = FormApp.openByUrl(url)
  var items = form.getItems();
  var images = []
  items.forEach(function (item) {
    if (item.getType() == 'FILE_UPLOAD') {
      images.push(item.getTitle())
    }
  })
  return (images)
}

Bonjour,

C'est dingue, aujourd'hui ca fonctionne.

Merci c'est génial.

Je reviens vers toi si besoin.

il existe une possibilité pour que ça fonctionne avec plusieurs photos issue de la même question ?

Bonjour,

C'est dingue, aujourd'hui ca fonctionne.

C'est pas le fruit du hasard, j'ai corrigé ton script !

Oui pour plusieurs photos, mais quels noms dans ce cas, elles risquent d'avoir tous le même nom puisque c'est le titre de la même question !

Merci,

Pour plusieurs photo le titre et "_1","_2"....

Et pour GETIMAGEFORM, je l'intègre en supplément du code ou à la place le la liste ?

C'est déjà fait dans le fichier que tu avais donné.

Merci,

Pour plusieurs photo le titre et "_1","_2"....

essaie ceci (j'ai un peu élargi le champ à d'autres choses que les photos du reste)

function onFormSubmit(e) {
  var responses = e.namedValues;
  var liste = getFileForm()            // liste des titres des questions de type "upload"
  var nomDossier = responses['NOM DU SITE'][0] + '_' + responses['NUMERO DU SITE'][0] // dossier de staockage dépendant d'une réponse
  var sheet = SpreadsheetApp.getActiveSheet();
  var row = sheet.getActiveRange().getRow();
  var column = e.values.length + 1;
  var regExp = new RegExp("id=(.*)");
  try {
    liste.forEach(elem => {
      responses[elem][0].split(',').forEach((el, i) => {
        if (el != '') {
          var fileId = regExp.exec(el)[1]
          var file = DriveApp.getFileById(fileId)
          file.setName(elem + '_' + (+i + 1))
          file.moveTo(DriveApp.getFolderById(getFolderId(nomDossier)))
        }
      })
    })
    sheet.getRange(row, column).setValue('ok');
  } catch (err) {
    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;
}
function getFileForm() {
  const url = SpreadsheetApp.getActiveSpreadsheet().getFormUrl()
  const form = FormApp.openByUrl(url)
  var items = form.getItems();
  var files = []
  items.forEach(function (item) {
    if (item.getType() == 'FILE_UPLOAD') {
      files.push(item.getTitle())
    }
  })
  return (files)
}

Bonjour,

Ca ne fonctionne pas, je n'ai plus de création de dossier dans le drive ni d'évènement dans le sheet.

Rechercher des sujets similaires à "projet google form apps script"