25

我正在尝试将表单数据发布到谷歌电子表格。目前,如果表单已通过验证,则会发生以下情况:

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

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

4

3 回答 3

37

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

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

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

<form id="formID" method="post" action="URL" target="hidden_iframe">

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

<iframe name="hidden_iframe" id="hidden_iframe" style="display:none;"></iframe>

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

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

就是这样。祝你好运!

于 2012-04-04T16:00:38.320 回答
13

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

用户可能还想考虑切换到这个新版本,因为它利用了其他新的 Google Apps 脚本服务,特别是:

于 2014-07-06T09:00:37.170 回答
3

我将向您展示将数据发送到没有 AJAX 的 Google SpreadSheet 的简单方法,既不是 Google Form,也不是 PHP……只是 Google SpreadSheet 和 HTML,甚至是 Android。

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

您只需要编辑器中的两个文件一个 HTML 和一个 Code.gs:

举个例子:

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

    <!DOCTYPE html>
    <html>
    <head>
    <base target="_top">
    
    <script>
    function Enviar(){
    
    var txt1=document.getElementById("txt1").value;
    var txt2=document.getElementById("txt2").value;
    var txt3=document.getElementById("txt3").value;
    google.script.run.doSomething(txt1,txt2,txt3);
    }
    </script>
    </head>
    
    <body>
    Prueba de Envio de informacion<br>
    <input type="text" value="EMAIL" name="txt1" id="txt1"><br>
    <input type="text" value="CEDULA" name="txt2" id="txt2"><br>
    <input type="text" value="NOMBRE" name="txt3" id="txt3"><BR>
    <Button name="btn1" onClick="Enviar();">Enviar</button>
    </body>
    
    </html>
    

有 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 是您的电子表格的网址

  1. 发布为应用程序并获取新脚本的 url。现在您可以将此 url 用作嵌入到您的 HTML 应用程序或 android 应用程序中。而已。将要求用户获得打开此脚本的权限
于 2016-04-03T02:08:16.143 回答