第一次在这里问一个问题.通常我可以在不必询问的情况下找到答案,但这次我被困住了,无法弄清楚我错过了什么.
我只是想让我的Android应用在网站上填写表格并提交.我不需要应用程序对发回的任何数据执行任何操作,只需填写表单并提交即可.基本上我正在尝试收集投票应用的结果.我认为表单提交很简单所以我创建了一个Google电子表格并从中制作了一个表单.我想我会将Android应用程序指向表单,然后我会在电子表格中包含所有数据供以后查看.我不能让Android应用程序实际填写表格.这是资源.
private void submitVote(String outcome) {
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("https://spreadsheets.google.com/spreadsheet/formResponse?hl=en_US&formkey=dDlwZzh4bGFvNFBxUmRsR0d2VTVhYnc6MQ&ifq");
List<BasicNameValuePair> results = new ArrayList<BasicNameValuePair>();
results.add(new BasicNameValuePair("entry.0.single", cardOneURL));
results.add(new BasicNameValuePair("entry.1.single", outcome));
results.add(new BasicNameValuePair("entry.2.single", cardTwoURL));
try {
post.setEntity(new UrlEncodedFormEntity(results));
} catch (UnsupportedEncodingException e) {
// Auto-generated catch block
Log.e("YOUR_TAG", "An error has occurred", e);
}
try {
client.execute(post);
} catch (ClientProtocolException e) {
// Auto-generated catch block
Log.e("YOUR_TAG", "An error has occurred", e);
} catch (IOException e) {
// Auto-generated catch block …Run Code Online (Sandbox Code Playgroud) 最近,我一直在进行一项调查.我开始在Excel Forms Online中创建它,但在我意识到它的一些缺点之后切换到Google Forms.我遇到了一些障碍,但我以为我已经准备好了.
不幸的是,我开始在表单中添加问题并改变响应(拼写错误等等),这开始引发一大堆问题.如果适用的话,我必须回去询问用户对新问题的回答.更糟糕的是我无法修改提交内容.我无法编辑连接到表单的电子表格,因为结果存储在表单中.如果我重新生成电子表格,那么表单中提交的响应将替换之前的响应.所以我根本无法编辑电子表格.
我一直在寻找一种尝试手动编辑用户提交的响应的方法.我发现了一个资源在这里堆栈溢出,并在这里在产品论坛谷歌网上论坛,但不幸的是,我尝试了所有的例子,没有一次成功(是的,我把我的表单的网址中,一切都与被替换的名称电子表格名称).
填写完我的信息后,我继续接收的错误是TypeError: Cannot call method "getDataRange" of null. (line 8, file "Code").但是这张纸不是空的,我知道.
是否有其他方法可以使这项工作,或更好的方式来编辑工作表回复?
现在执行此操作的唯一方法是手动返回并再次以该用户重新提交表单.这是一种痛苦,因为它是10分钟的复选框和复制和粘贴.另外,昨晚我不小心跳过复制1个角色,现在我不得不重新做一遍.
从我在网上看到的情况来看,这可以做到,但我没有尝试过.该表格目前正在播放并立即接受回复.任何解决方案都是可以接受的,只要有一种方法可以使用脚本或其他工具编辑他们的响应,所以我不需要自己手动重新执行所有操作.
我正在尝试使用绑定到表单的脚本从谷歌表单收集响应详细信息,使用onFormSubmit()触发器.
大多数情况下收到的细节没有错误,但偶尔会出现错误.收到触发器但没有数据传递给脚本.响应由Google表单控制台接收,但不会转发到脚本.
接收数据的代码:
function onFormSubmit(e)
{
Logger.log("A response has been received!");
Logger.log(e);
var resp = e.response.getItemResponses(); //capturing trigger event output
var form = e.source;
......
Run Code Online (Sandbox Code Playgroud)
出现错误时的执行记录:
[16-09-27 07:29:15:073 PDT] Starting execution
[16-09-27 07:29:15:096 PDT] Logger.log([A response has been received!, []]) [0 seconds]
[16-09-27 07:29:15:097 PDT] Logger.log([{authMode=FULL, triggerUid=xxxxxxx41}, []]) [0 seconds]
[16-09-27 07:29:15:099 PDT] Execution failed: TypeError: Cannot call method "getItemResponses" of undefined. (line 18, file "Code") [0.002 seconds total runtime]
Run Code Online (Sandbox Code Playgroud)
到目前为止,我通过复制表单并重新设置所有权限来解决它.但是,我想要一个不再让我这样做的解决方案.在我的第10次重复现在:(
当我成功收到回复时,e也有一个回复键.
我在网页上使用Google表单.我将表单中的源代码直接复制到我的页面上,这样我就可以修改一些HTML而不是使用iframe.然后,我不想将用户带到google docs响应页面,而是将其重定向到另一个页面.
我遇到的麻烦是页面重定向.我能够通过以下方式在Chrome和Firefox中正常运行:
<form target="GoogleResponse" action="https://docs.google.com/spreadsheet/
formResponse?formkey=xxxxxxxxxxxxxxxxxxxxxxxxxx&ifq;" onsubmit="
window.location = 'targetPage.html';" method="POST" id="ss-form">
Run Code Online (Sandbox Code Playgroud)
IE和Safari都自动进行重定向,并且响应从未写入Google表单.如果我放弃重定向,则该操作在两者中都能完美运行,并且响应会记录在Google电子表格中.
所以我试图将操作拉出来,而不是在onsubmit中完成所有操作,就像这样:
<form target="GoogleResponse" onsubmit="this.action = https://docs.google.com
/spreadsheet/formResponse?formkey=xxxxxxxxxxxxxxxxxxxxxxxxxx&ifq';
window.location = 'targetPage.html';" method="POST" id="ss-form">
Run Code Online (Sandbox Code Playgroud)
与以前相同的问题,IE和Safari都重定向,并且没有任何内容写入Google电子表格.再次,如果我删除重定向,响应将记录在所有浏览器中.我还可以做其他事情,比如在行动后投入警报,一切都继续正常.我唯一看到问题的方法是重定向.
所以在这一点上我唯一可以想到的是,它们是重定向和动作之间的某种冲突.我对javascript和表单的工作知识非常有限,所以任何帮助或建议将不胜感激!
如何引用默认的"提交"表单按钮以将"onsubmit"触发器与另一个操作相关联?谢谢.
例如,使用onsubmit,
Logger.log('do something');
Run Code Online (Sandbox Code Playgroud) 我有一个Google表单,允许用户输入他们的信息.提交表单后,数据会作为新行插入Google电子表格.
但是我想在提交表单后立即显示动态消息,覆盖原始的"谢谢"消息.新消息将显示他们刚填写的信息,并为其分配编号.
例如,玛丽填写了她的数据并提交了表格.由于Mary是第5个提交此表单的人,因此该消息显示她的号码为5.
有没有办法实现这个目标?我一直在研究Google App Script和HTML服务,但我不确定这是否正确.
请注意,我们已经使用电子邮件发送此邮件已有好几年了,但是用户强烈建议在表单提交后立即显示其ID,这将使许多事情变得更加容易.
非常感谢你!
我一直在努力,现在我可以创建一个向电子表格插入新行的网页.但另一个问题:如何发布网页?当我打开"/ dev"链接时,它工作正常; 但是,当我打开"/ exec"链接时,它说找不到"Index.html",我确信有一个名为Index.html的文件.
我正在尝试编写一个Python脚本,这样可以在Google表单中提交响应,如下所示:https: //docs.google.com/forms/d/152CTd4VY9pRvLfeACOf6SmmtFAp1CL750Sx72Rh6HJ8/viewform
但是我如何实际发送POST以及如何找出这个POST应该包含哪些内容?
所以我有一个Google表单,我想通过这样的电子邮件链接传递一个参数:
https://docs.google.com/URL/forms/d/LONGSTRING/viewform?id=12345
我希望能够获取该ID并将其传递到电子表格记录结果中.现在我已经写了一个电子表格,但获取id是有问题的.
我已经尝试过了:
function doGet(e) {
var id = e.parameter.id;
Logger.log(id);
}
Run Code Online (Sandbox Code Playgroud)
和
function doPost(e) {
var id = e.parameter.id;
Logger.log("do post " + id);
}
Run Code Online (Sandbox Code Playgroud)
当我查看执行记录时,这两个都会抛出错误,我怀疑这是因为它们被设计为在已部署的webapps中运行.
另外,我尝试使用普通的旧javascript来做类似的事情:
var formUrl = window.location.href;
var formId = formUrl.split('?id=')[1];
Run Code Online (Sandbox Code Playgroud)
当您查看执行记录时,这也会引发错误.
还有其他想法吗?也许我可以用另一种方式获取信息?
场景如下:
通过Google Apps脚本,是否可以通过这种方式检索受访者的电子邮件地址?由于特定原因,我不能查询被访者的电子邮件地址.以这种方式检索电子邮件地址也可以作为验证,以便可以验证我发送表单的哪个电子邮件地址有响应.
我知道如果你有一个包含用户电子邮件地址的字段,这是非常可行的.甚至还有专门的教程.但是,我还没有看到上述用例的指南.
我试过用Session.getActiveUser().getEmail().但是,它似乎只检索我自己的电子邮件地址(因为它认为我,查看电子表格的人,作为活动用户).
google-forms ×10
javascript ×3
android ×1
editing ×1
forms ×1
google-apps ×1
html ×1
post ×1
python ×1
spreadsheet ×1