【问题标题】:Attempting to pre-fill a checkbox answer on Google Form, but not working尝试在 Google 表单上预先填写复选框答案,但无法正常工作
【发布时间】:2021-11-02 21:23:28
【问题描述】:

使用here 提供的解决方案,我正在尝试预先填写并提交 Google 表单。它一直有效,直到遇到复选框问题 - 例如:

关于表单的问题:有人讨论过这个话题吗? 可能的答案:约翰、哈利、爱丽丝

我尝试预先填写的答案是“Alice” - 但我收到以下错误消息:

异常:参数(字符串)与 FormApp.CheckboxItem.createResponse 的方法签名不匹配。请参阅下面的代码。任何帮助表示赞赏...

function readSpreadsheet() {
  // Adapted from https://stackoverflow.com/questions/65906603/is-it-possible-to-create-google-form-responses-with-data-from-google-sheets

var formid = 'formidgoeshere';
var ssid = 'ssidgoeshere';
var sheetname = 'answers'

  var sheet = SpreadsheetApp.openById(ssid).getSheetByName(sheetname);
  var range = sheet.getDataRange();
  var numRows = range.getNumRows();
  var values = range.getValues();
  var form = FormApp.openById(formid)


  var items = form.getItems();
  for (var i = 1; i < numRows; i++) {
    var value = values[i];
    Logger.log(value)
    var formResponse = form.createResponse();
    var k = 0;
    for (var j = 0; j < items.length; j++) {
      var item;
      switch (items[j].getType()) {
        case FormApp.ItemType.CHECKBOX:
          item = items[j].asCheckboxItem();
          Logger.log("Item number " + j + " is titled: " + item.getTitle() );
          formResponse.withItemResponse(item.createResponse(value[k++]));
          break;  
        case FormApp.ItemType.LIST:
          item = items[j].asListItem();
          Logger.log("Item number " + j + " is titled: " + item.getTitle() );
          formResponse.withItemResponse(item.createResponse(value[k++]));
          break; 
        case FormApp.ItemType.MULTIPLE_CHOICE:
          item = items[j].asMultipleChoiceItem();
          Logger.log("Item number " + j + " is titled: " + item.getTitle() );
          formResponse.withItemResponse(item.createResponse(value[k++]));
          break; 
        case FormApp.ItemType.PARAGRAPH_TEXT:
          item = items[j].asParagraphTextItem();
          Logger.log("Item number " + j + " is titled: " + item.getTitle() );
          formResponse.withItemResponse(item.createResponse(value[k++]));
          break; 
        case FormApp.ItemType.TEXT:
          item = items[j].asTextItem();
          Logger.log("Item number " + j + " is titled: " + item.getTitle() );
          formResponse.withItemResponse(item.createResponse(value[k++]));
          break;         
        case FormApp.ItemType.CHECKBOX:
          item = items[j].asCheckboxItem();
          Logger.log("Item number " + j + " is titled: " + item.getTitle() );
          formResponse.withItemResponse(item.createResponse(value[k++]));
          break;          
        default:
          Logger.log("#" + (i + 1) + ":Do nothing for item " + j + " of type " + items[j].getType());
          continue;
      } 
      if(j==0){
        Logger.log("This item is the FORM NUMBER");        
      };
    }
    formResponse.submit();
  }
}

【问题讨论】:

  • 试试item.createResponse([value[k++]])

标签: google-apps-script google-forms


【解决方案1】:

试试这个:

function dataFromGSheets() {
  const ss = SpreadsheetApp.getActive();
  const sheet = ss.getSheetByName("Sheet1");
  const [header, ...data] = sheet.getDataRange().getDisplayValues();
  const choices = {};
  header.forEach((title, index) => {
   choices[title] = data.map(row => row[index]).filter(e => e) });
  return choices;
}

function populateGForms() {
  const Google_Form_ID = gobj.globals.editformid2;
  const googleForm = FormApp.openById(Google_Form_ID);
  const items = googleForm.getItems();
  const choices = getDataFromGoogleSheets();
  items.forEach(function (item) {
    const itemTitle = item.getTitle();
    if (itemTitle in choices) {
      const itemType = item.getType();
      switch (itemType) {
        case FormApp.ItemType.CHECKBOX:
          item.asCheckboxItem().setChoiceValues([...new Set(choices[itemTitle])]);
          break;
        case FormApp.ItemType.LIST:
          item.asListItem().setChoiceValues([...new Set(choices[itemTitle])]);
          break;
        case FormApp.ItemType.MULTIPLE_CHOICE:
          item.asMultipleChoiceItem().setChoiceValues([...new Set(choices[itemTitle])]);
          break;
        default:
          Logger.log("Ignore question", itemTitle);
      }
    }
  });
}

【讨论】:

  • 嗨 Cooper,它对我不起作用 - 你将如何合并表单类型 ItemType.TEXT 和 PARAGRAPH_TEXT ?
猜你喜欢
  • 2014-12-11
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 2017-04-04
  • 1970-01-01
  • 2019-01-01
相关资源
最近更新 更多