poergen
Goto Top

Daten von Google Sheets in Google Forms übernehmen

Hallo zusammen,

Ich möchte gern Daten aus einer Sheets Tabelle beim Öffnen von einem verknüpften Formular entsprechend in einem Drop-Down-Menü übernehmen. Meine Script-Kenntnisse sind noch nicht so ausgereift, um es selbst zu schreiben (falls das überhaupt möglich ist). Ich habe im Netz nur eine Add-On-Variante gefunden. Habt ihr schon einmal so etwas gemacht bzw. gibt es überhaupt so eine Möglichkeit? (Ich kann das Add-On leider nicht benutzen, da es von meinem Arbeitgeber gesperrt wurde aber die gewünschte Aufgabe so funktionieren soll.)... Habt ihr da eine Idee und könnt mir da eventuell helfen?

Vielen Dank

Content-ID: 7919322801

Url: https://administrator.de/contentid/7919322801

Ausgedruckt am: 24.11.2024 um 14:11 Uhr

12764050420
12764050420 01.05.2024 um 08:51:38 Uhr
Goto Top
function populateDropDown() {
  var form = FormApp.openById('YOUR_FORM_ID');  
  var sheet = SpreadsheetApp.openById('YOUR_SHEET_ID').getSheetByName('SHEET_NAME');  
  var dataRange = sheet.getRange('A2:A'); // Assuming the data is in column A starting at row 2  
  var data = dataRange.getValues();
  var choices = [];

  for (var i = 0; i < data.length; i++) {
    choices.push(data[i][0]);
  }

  var dropDownItem = form.getItems(FormApp.ItemType.LIST);
  var dropDown = dropDownItem[0].asListItem();
  dropDown.setChoiceValues(choices);
}
Poergen
Poergen 06.05.2024 um 13:42:18 Uhr
Goto Top
Vielen Dank für deine Antwort und deine Arbeit.

Diese hat sich vielversprechend angehört aber mir wurde dieser Fehler zurückgegeben. Aber vielleicht habe ich auch einen Fehler gemacht. Muss das Formular irgendwelche Voreinstellungen haben?

Es muss auch nicht zwingend Drop-Down sein. Es kann auch Multiple-Choice sein. Oder kannst du mir ein Menü empfehlen für ca. 200 Items?

VG Frank
fehlermeldung_dropdown
Poergen
Poergen 06.05.2024 um 14:25:24 Uhr
Goto Top
Nochmal kurz zu Verständnis:

1. Es besteht ein verknüpftes Formular mit einer Sheets-Tabelle, wo prüfrelevante Gegenstände registriert werden.
2. Das zweite Formular soll auf die selbe Datei zugreifen und per Script z.B. ein Drop-Down-Menü erstellen mit dem Inhalt der Spalte, wo die Registriernummern zu finden sind (E3:E).
3. Der Prüfer sollte dann das 2. Formular zum Prüfen öffnen und es soll automatisch das Drop-Down-Menü mit den Registriernummern vom ersten Arbeitsblatt erstellt werden.
4. Der Prüfer sucht sich dann die passende Nummer raus und bestätigt diese. Dann gibt er das neue Prüfungsdatum im neuen Abschnitt ein und sendet das Formular ab.
5. Die Daten werden dann in einem neuen Arbeitsblatt gesammelt und weiterverarbeitet.

Ich hoffe, ich konnte das verständlich erklären.

Danke für eure Hilfe!
Poergen
Lösung Poergen 06.05.2024 um 18:57:14 Uhr
Goto Top
Hallo zusammen,

nach tagelangem Recherchieren, habe ich die Lösung nun gefunden:

Vorlage kommt von YT: https://www.youtube.com/watch?v=o3AL7ASI_cA

var ssID = "abc";   
var formID = "def";   

var wsData = SpreadsheetApp.openById(ssID).getSheetByName("Arbeitsblatt");  
var form = FormApp.openById(formID);


function main(){

  var labels = wsData.getRange(1,1,1,wsData.getLastColumn()).getValues()[0];
  
  labels.forEach(function(label,i){
    var options = wsData
      .getRange(2,i+1,wsData.getLastRow()-1,1)
      .getValues()
      .map(function(o){return o[0]})
      .filter(function(o){ return o !==""});  
    UpdateDropDownUsingTitle(label,options);
  });
}

function UpdateDropDownUsingTitle(title,values) {
var items = form.getItems();
var titles = items.map(function(item){
  return item.getTitle();
});

var position = titles.indexOf(title);
if(position !== -1){
  var item = items[position];
  var itemID = item.getId();
  UpdateDropDown(itemID,values);
  }
}

function UpdateDropDown(id,values){
  var item = form.getItemById(id);
  item.asListItem().setChoiceValues(values);
}