web-dev-qa-db-de.com

Importieren Sie Google-Spreadsheet-Daten mit App-Skript in Google-Formulare

Ich habe im Internet gesucht und kann weder eine Antwort darauf finden, noch die Dokumentation dafür. Ich muss Google Forms-Fragen mit Daten aus einer Google-Tabelle mit Hilfe eines App-Skripts dynamisch generieren, aber ich weiß nicht wie eine Tabelle referenzieren und lesen.

9
Vector

Es ist ziemlich einfach, siehe hier: https://developers.google.com/apps-script/guides/sheets#reading

Sie müssen das Blatt nur mit dem Dokumentschlüssel öffnen, die Daten auswählen und die Zellen als JS-Objekt lesen.

4
bjorke

Wählen Sie in Ihrer Tabelle Tools > Script Editor aus und passen Sie diese an Ihre Bedürfnisse an:

/**
   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);

};

Wählen Sie zum Debuggen das Skript in der Combobox aus und klicken Sie entweder auf "Play" oder "Debug". Beim ersten Mal müssen Sie ihm die Berechtigung erteilen, mit Ihrer Tabelle und Ihrem Formular zu interagieren.

Wenn Sie mit dem Ergebnis zufrieden sind, wählen Sie im Editor Resources > Triggers for the active project aus und fügen Sie diese Methode hinzu, um sie bei jeder Änderung in der Kalkulationstabelle auszulösen (bei Änderung, nicht bei Bearbeitung). 

Danach werden Ihre Formularoptionen nach jeder Änderung Ihrer Tabelle in Echtzeit geändert.

12
Nacho Coloma

Hier ist ein Beispiel, das für mich funktioniert, bitte überprüfen:

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');
  });
}

Sie können Ihre Blatt-ID beispielsweise von der URL erhalten:

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

Lassen Sie mich wissen, wenn Sie weitere Fragen haben.

0
Bowen Xu