google-apps-script - 获取条目 ID,用于在 Google 表单 URL 中预填充字段(项目)

标签 google-apps-script google-apps google-forms

注意:这个问题不是关于查找项目(表单元素)的 ID,而是关于条目的 ID。这些是不同的东西。条目 ID 是一个数字,用于在表单 URL 中预填充字段(项目)。

如此处所述https://developers.google.com/apps-script/reference/forms/text-item可以通过 getID() 方法获取 TextItem ID(实际上是任何 Item ID)。

如果您打开任何公开的 Google 表单 HTML 源代码,您将在 var FB_PUBLIC_LOAD_DATA 中看到类似这样的内容:

[232495719,"Question 1",null,0,[[1492883199]]
 ^                               ^
 Item ID                         Entry ID

我没有看到获取条目 ID 的方法。真的可以通过 Google Apps Script API 来实现吗?

最佳答案

我想扩展@devonuto 的想法

下面的代码应该返回一个表单字段数组,其属性包括 entry

function getPreFillEntriesMap_(id){
  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,
        titile: items[i].getTitle(),
        type: "" + items[i].getType()
      });
    }
  }

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

  return 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;
    default:
      return undefined; 
  } 
}

您必须自己扩展 getDefaultItemResponse_() 以支持更多类型的项目。

这对我来说很好用

function run(){
  Logger.log(JSON.stringify(
    getPreFillEntriesMap_("1X9MBJDZYwrij8m_c7V4HbrT1cOyBu2OLRvDsnqS4Vdw"),
    null,
    "  "
  ));
}
[18-07-07 17:22:46:288 MSK] [
  {
    "id": 1144844846,
    "entry": "1854759972",
    "titile": "Q1",
    "type": "TEXT"
  },
  {
    "id": 1458564606,
    "entry": "1109661125",
    "titile": "Q2",
    "type": "TEXT"
  },
  {
    "id": 216942465,
    "entry": "1829112829",
    "titile": "Q3",
    "type": "MULTIPLE_CHOICE"
  }
]

The snippet get_pre_fill_entries_map

关于google-apps-script - 获取条目 ID,用于在 Google 表单 URL 中预填充字段(项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46017170/

相关文章:

excel - 如何将图像附件发送到电子邮件

javascript - 将 Javascript 变量传递给 Google 脚本函数 (Google Sheets)

javascript - Google App Script ContentService downloadAsFile 不工作

google-apps-script - Google 表单响应事件的时间戳是否始终与链接电子表格中的时间戳相同?

google-apps-script - 从谷歌应用程序脚本预填谷歌表单

google-apps-script - 时间限制后自动提交谷歌表单

javascript - 形状大小不等于表格单元格大小并适合形状内的文本

javascript - 在 Google Apps Script 中的函数内调用函数(invoke)

google-app-engine - 使用 5 个 SNI 证书插槽,GAE 每秒可以支持多少次查询?

google-sheets - 更改 Google 电子表格中的sheetId