AJAX发布到谷歌电子表格

我正在尝试将表单数据发布到Google电子表格中。 目前,如果表单已经过validation,则会发生以下情况:

if (validateForm === true) { $.ajax({ type: 'post', url: 'https://docs.google.com/spreadsheet/ccc?key=0AlwuDjMUxwhqdGp1WU1KQ0FoUGZpbFRuUDRzRkszc3c', data: $("#workPLZ").serialize(), success: alert($("#workPLZ").serialize()) }); } else {} 

我使用成功设置来validation我的表单数据是否正确序列化(它是)并且它是成功的。 但是,我的Google电子表格没有更新(没有数据通过)。 我在这里使用了示例代码,将doGet更改为doPost( http://mashe.hawksey.info/2011/10/google-spreadsheets-as-a-database-insert-with-apps-script-form-postget-submit-方法/ ),并使谷歌电子表格公开可用(并且可由任何人编辑)。 我按照说明,将代码复制到googledocs,然后运行setUp两次(第一次请求许可,第二次我运行它我没注意到任何事情发生)。 谁能帮我? 我觉得我非常接近。

好吧,我想出了一个解决方案。 在被告知跨域AJAX问题之后,我决定继续使用文章作者在http://mashe.hawksey.info/2011/10/google-spreadsheets-as上使用的“t”方法。 -a-database-insert-with-apps-script-form-postget-submit-method / 。

要将数据发布到Google电子表格,请先制作电子表格并将工作表名称(左下角)更改为DATA。 接下来,在电子表格中打开脚本编辑器(Tools ==> Script Editor)并粘贴文章中的脚本。 将“doGet(e)”更改为“doPost(e)”。 运行setUp脚本两次。 它第一次要求运行权限(授予它),然后第二次选择运行它时,你将不会得到它运行的任何弹出指示(我在编辑器中运行我的,所以它说“运行setUp”上面代码输入区域,但这就是全部)。 之后,在脚本编辑器中选择“发布”,然后选择“发布为服务”。 单击“允许任何人调用此服务”单选按钮和“允许匿名访问”复选框。 复制URL(重要!)并单击“启用服务”。 这是“困难的部分”。

在HTML表单中,您提交的每个元素都必须具有“name”属性(例如)此名称是数据的发送方式 – 每个条目都附加到其名称。 确保对于您收集的每个表单数据,它都有一个名称,并且该名称在电子表格中作为列输入(这就是它将表单中的数据映射到电子表格的方式)。 对于您的表单,将方法设置为发布,并将操作设置为“发布为服务”URL(我告诉您保存),如下所示:

 

我包含了一个表单ID,因此我可以选择表单并使用jquery提交。 在您的HTML中,在上述表单之前添加隐藏的iframe:

  

设置某种formsvalidation(不是必需的,但如果没有填写每个字段,您将在电子表格中获得不完整的数据),如果validation它,则调用jquery .submit()。 例如:

  if (formValidation === true){ $("#formID").submit(); } else {} 

就是这样。 祝好运!

由于Google Apps脚本现在有一个可以返回JSON响应的ContentService ,因此可以在不使用隐藏的iframe的情况下发出ajax请求。 作为原始解决方案的文章作者,我发布了这种技术的更新版本,其中包括一个ajax示例

用户可能还需要考虑切换到此新版本,因为它使用了其他新的Google Apps脚本服务,特别是:

  • 使用LockService来防止并发写访问; 和
  • 切换到新的PropertiesService来存储脚本数据

我将向您展示将数据发送到Google SpreadSheet的简单方法,而无需AJAX,无论是Google表格还是PHP ……只需Google SpreadSheet和HTML甚至Android。

  1. 创建一个新的Google SpreadSheet。
  2. 打开工具/脚本编辑器

你只需要在编辑器中有两个文件,一个HTML和一个Code.gs:

举个例子:

  1. 转到文件/新的HTML名称此文件= Index.html:

            Prueba de Envio de informacion



有3个字段要发送:EMAIL,CEDULA,NOMBRE

  1. 在同一个ScriptEditor中,转到de Code.gs文件并键入:

     function doGet() { return HtmlService.createHtmlOutputFromFile('Index') .setSandboxMode(HtmlService.SandboxMode.IFRAME); } function doSomething(s1,s2,s3){ Logger.log('datos:'+s1+" "+s2+" "+s3); var enlace="https://docs.google.com/spreadsheets/d/ 1XuAXmUeGz2Ffr11R8YZNihLE_HSck9Hf_mRtFSXjWGw/edit"; var ss = SpreadsheetApp.getActiveSpreadsheet(); var ss = SpreadsheetApp.openByUrl(enlace); var sheet = ss.getSheets()[0]; sheet.appendRow([s1, s2, s3]); Logger.log(ss.getName()); } 

其中enlace是SpreadSheet的url

  1. 发布为Application App并获取新脚本的URL。 现在,您可以将此URL用于嵌入HTML应用程序或Android应用程序中。 而已。 系统将要求用户授予打开此脚本的权限