注意:这个问题不是关于查找项目(表单元素)的 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" } ]
关于google-apps-script - 获取条目 ID,用于在 Google 表单 URL 中预填充字段(项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46017170/