web-dev-qa-db-fra.com

Importer des données de feuille de calcul Google dans des formulaires Google avec un script d'application

J'ai effectué une recherche sur Internet et je ne trouve pas de réponse à cette question ni à sa documentation. faire référence et lire une feuille de calcul.

9
Vector

C'est assez simple, voir ici: https://developers.google.com/apps-script/guides/sheets#reading

Vous devez simplement ouvrir la feuille à l'aide de sa clé doc, sélectionner les données et lire les cellules en tant qu'objet JS.

4
bjorke

Dans votre feuille de calcul, sélectionnez Tools > Script Editor et adaptez-le à vos besoins:

/**
   After any change in the sheet, update the combobox options in the Form
*/
function onChange(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
  var range = sheet.getDataRange();
  var values = range.getValues();
  var comboValues = [];  // <-- cheddar will go here

  // in this example we are interested in column 0 and discarding row 1 (the titles)
  for (var i = 1; i <= values.length; i++) {
    var v = values[i] && values[i][0];
    v && comboValues.Push(v)
  }

  // Sort the values alphabetically, case-insensitive
  comboValues.sort(
    function(a, b) {
      if (a.toLowerCase() < b.toLowerCase()) return -1;
      if (a.toLowerCase() > b.toLowerCase()) return 1;
      return 0;
    }
  );
  Logger.log(comboValues);

  // Use your form ID here. You can get it from the URL
  var form = FormApp.openById('<my-form-id>');

  /* 
    Uncomment this to display the item IDs
    and pick the one that you want to modify

  var items = form.getItems();
  for (i = 0; i < items.length; i++) {
    Logger.log("ID: " + items[i].getId(), ': ' + items[i].getType());
  }
  */
  form.getItemById(807137578).asListItem().setChoiceValues(comboValues);

};

Pour déboguer, sélectionnez le script dans la liste déroulante et cliquez sur "play" ou "debug". La première fois, vous devrez lui donner des autorisations pour interagir avec votre feuille de calcul et votre formulaire.

Une fois que vous êtes satisfait du résultat, dans l’éditeur, sélectionnez Resources > Triggers for the active project et ajoutez cette méthode à déclencher lors de toute modification de la feuille de calcul (à la modification, pas à la modification). 

Après cela, vos options de formulaire seront modifiées en temps réel après tout changement dans votre feuille de calcul.

12
Nacho Coloma

Voici un exemple qui fonctionne pour moi, merci de bien vouloir vérifier:

function getSpreadsheetData(sheetId) {
  // This function gives you an array of objects modeling a worksheet's tabular data, where the first items — column headers — become the property names.
  var arrayOfArrays = SpreadsheetApp.openById(sheetId).getDataRange().getValues();
  var headers = arrayOfArrays.shift();
  return arrayOfArrays.map(function (row) {
    return row.reduce(function (memo, value, index) {
      if (value) {
        memo[headers[index]] = value;
      }
      return memo;
    }, {});
  });
}

function makeOurForm() {

  var sheetId='input_your_sheet_id'

  getSpreadsheetData(sheetId).forEach(function (row) {
// Set your form template as follows
  var formName=row.Name
// Create your form programmatically, each row means one form
  var form = FormApp.create(formName)

  form.setDescription('xxx');

  var capitalizedName = row.Name.charAt(0).toUpperCase() + row.Name.slice(1);

  form.addSectionHeaderItem().setTitle(capitalizedName);

  var item = form.addMultipleChoiceItem();
  item.setTitle('xxx')
      .setChoices([
        item.createChoice('xxx'),
      ]);

  form.addParagraphTextItem().setTitle('xxx');
  });
}

Vous pouvez obtenir votre identifiant de feuille à partir de l'URL, par exemple:

https://docs.google.com/spreadsheets/d/YourSheetId/ modifier # gid = 0

Dis moi si tu as d'autres questions.

0
Bowen Xu