检索 Google 表格中复选框项目的 EntryID 无效

retrieving EntryID for Checkbox item in Google Sheets Form not working

我在此 post 上使用了来自@contributorpw 的代码,并添加了来自@SourceFli 的扩展表单类型列表(在相同的 post 中)。

我收到错误消息:“异常:参数 (String) 与 FormApp.CheckboxItem.createResponse 的方法签名不匹配”。该复选框只有 1 个选项:“是”。

我所有表单项的其余部分都只是文本项并且工作正常。

function getPreFillEntriesMap(){
  var ssOrder = SpreadsheetApp.openById(ORDER_SPREADSHEET_ID);
  var orderFormUrl = ssOrder.getFormUrl();
  var orderForm = FormApp.openByUrl(orderFormUrl);

  var form = orderForm;
//  var form = FormApp.openById(id);
  var items = form.getItems();
  var newFormResponse = form.createResponse();
  var itms = [];
  for(var i = 0; i < items.length; i++){
    var response = getDefaultItemResponse_(items[i]);
    if(response){
      newFormResponse.withItemResponse(response);
      itms.push({
        id: items[i].getId(),
        entry: null,
        title: items[i].getTitle(),
        type: "" + items[i].getType()
      });
    }
  }

  var ens = newFormResponse.toPrefilledUrl().split("&entry.").map(function(s){
    return s.split("=")[0];
  });
  ens.shift();

  return Logger.log(itms.map(function(r, i){
    r.entry = this[i];
    return r;
  }, ens));

}


function getDefaultItemResponse_(item){
  switch(item.getType()){
    case FormApp.ItemType.TEXT:
      return item.asTextItem().createResponse("1");
      break;
    case FormApp.ItemType.MULTIPLE_CHOICE:
      return item.asMultipleChoiceItem()
        .createResponse(item.asMultipleChoiceItem().getChoices()[0].getValue());
      break;
    case FormApp.ItemType.CHECKBOX:
      return item.asCheckboxItem()
        .createResponse(item.asCheckboxItem().getChoices()[0].getValue());
      break;
    case FormApp.ItemType.DATETIME:
      return item.asDateTimeItem()
        .createResponse(new Date());
      break;
    case FormApp.ItemType.DATE:
      return item.asDateItem()
        .createResponse(new Date());
      break;
    case FormApp.ItemType.LIST:
      return item.asListItem()
        .createResponse(item.asListItem().getChoices()[0].getValue());
      break;
    case FormApp.ItemType.PARAGRAPH_TEXT:
      return item.asParagraphTextItem()
        .createResponse(item.asParagraphTextItem().createResponse("some paragraph"));
      break;
    case FormApp.ItemType.CHECKBOX_GRID:
      return item.asCheckboxGridItem()
        .createResponse(item.asCheckboxGridItem().createResponse([item.asGridItem().getColumns[0], item.asGridItem().getRows[0]]));
      break;
    case FormApp.ItemType.DURATION:
      return item.asDurationItem()
        .createResponse(item.asDurationItem().createResponse(2, 20, 20));
      break;
    case FormApp.ItemType.GRID:
      return item.asGridItem()
        .createResponse(item.asGridItem().createResponse([item.asGridItem().getColumns[0], item.asGridItem().getRows[0]]));
      break;
   case FormApp.ItemType.SCALE:
      return item.asScaleItem()
        .createResponse(item.asScaleItem().createResponse(1));
      break;
   case FormApp.ItemType.TIME:
      return item.asTimeItem()
        .createResponse(item.asTimeItem().createResponse(1, 1));
      break;
    default:
      return undefined; 
  } 
}

response of createResponse(responses) of Class CheckboxItem 是 String[]。在您的脚本中,使用了该字符串。我认为这可能是您遇到问题的原因。那么下面的修改呢?

发件人:

return item.asCheckboxItem()
        .createResponse(item.asCheckboxItem().getChoices()[0].getValue());

收件人:

return item.asCheckboxItem()
        .createResponse([item.asCheckboxItem().getChoices()[0].getValue()]);

参考: