获取条目ID,用于预填充Google表单URL中的字段(Items)

时间:2017-09-02 18:55:49

标签: google-apps-script google-apps google-form

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

如此处https://developers.google.com/apps-script/reference/forms/text-item所述,可以通过import random number = random.randint(1, 100) while True: pick = input("Choose a number between 1 and 100. "+ str(number)) pick = int(pick) if pick == number: print("You are correct, great job! ") if pick > number: print("That was too high of a guess. Try again. ") elif pick < number: print("That was too low of a guess. Try again. ") 方法获取TextItem ID(实际上是任何Item ID)。

如果您打开任何公开的Google表单HTML源代码,您会在getID()中看到类似的内容:

var FB_PUBLIC_LOAD_DATA

我没有看到获取条目ID 的方法。实际上是否可以通过Google Apps Script API进行操作?

5 个答案:

答案 0 :(得分:3)

我想扩展@devonuto的想法

下面的代码应返回一个包含其属性包括<code jcr:primaryType="cq:Widget" fieldLabel="Code" key="code" width="100%" xtype="textfield"/> <name cr:primaryType="cq:Widget" fieldLabel="Name" key="name" width="100%" xtype="textfield"/>

的Form字段数组。
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,
    "  "
  ));
}

答案 1 :(得分:2)

有两种获取条目ID的方法

  1. 来自预先填好的网址。
    • 为此,您有两种选择:
      1. 从表单编辑器或
      2. 获取预填充的URL
      3. 使用toPrefilledUrl() Google Apps脚本方法获取预先填充的网址。
  2. 从表单响应视图。
    • 为此,您应该转到表单的源代码。如果您的表单使用部分,这可能会很棘手,因为它可能不会显示所有条目ID的任何页面。

答案 2 :(得分:2)

意识到这是一个旧线程,但是我一直在做类似的事情,我需要ID才能在C#应用程序中创建预填充超链接。

您可以为此创建响应,而无需提交即可获取信息。

import pandas as pd
import numpy as np
data={'Col1':['AAPL', np.nan, 'GOOG', 'MMM', np.nan, 'INTC', 'FB'],'Col2':['GOOG', 'IBM', 'MSFT', np.nan, 'GOOG', 'AAPL', 'VZ']}
df=pd.DataFrame(data,columns=['Col1','Col2'])
print (df)

# How to code after this to produce expected result?
# Appreciate any hint/help provided

答案 3 :(得分:1)

这个对我有用。

1.获取预填链接(您可以在表单编辑窗口的更多选项中看到)。

2.在新出现的表单中,填写所有的图块,然后点击“获取链接”。

3.在新标签中粘贴链接,填​​写好的表格就会出现。

  1. 检查此表单的 URL,您可以看到每个磁贴的条目 ID 以及您填写的回复。

5.右键单击带有响应的第一个图块,然后检查。

6.Cmd+f for Mac 或 Ctrl+f for windows 搜索,搜索你输入的响应你可以看到代码中的元素Id。

答案 4 :(得分:0)

好答案@contributorpw ...很好。

Youd仅添加了几种表单类型,因此我添加了其余大多数表单类型。在撰写本文时,我在文档中没有看到.asFileItem()的选项,因此我没有添加该选项以及其他一些较不常见的选项(例如PAGE_BREAK,SECTION_HEADER等)。 )

欢迎有人添加它们;-)

pip install pygame==2.0.0.dev14