【问题标题】:Google Form data to store in cloud SQL database谷歌表单数据存储在云 SQL 数据库中
【发布时间】:2015-11-18 18:34:25
【问题描述】:

我是 Google 表单和 Google Apps 脚本的新手。我有十个 Google 表单,在提交表单时,它们会填充相应的 Google 表格。

现在,这就是我想要的,在提交表单时,我希望该信息也存储在云 SQL 数据库中。哪些步骤将实现这一目标?

【问题讨论】:

    标签: google-apps-script google-sheets google-cloud-sql google-forms


    【解决方案1】:

    接受响应并将其复制到电子表格的 Google 表单的正常数据流如下所示:

    表单提交触发器有两次机会在 Cloud SQL 数据库中复制表单响应;您可以从Google Form Form submit eventGoogle Sheets Form submit event 触发。

    无论哪种方式,您都将拥有一个在每次提交表单时都会调用的脚本,以及一个包含响应值的事件对象。您的触发器函数应使用JDBC 连接到数据库 - 该链接包含一个介绍,引导您了解重点。

    示例

    假设我们有一个表格询问两个问题,“姓名”和“年龄”。这将导致我们的电子表格中有 3 列;每个问题的“时间戳”加一个。

    为此,我们设置了一个 Cloud SQL 数据库,其中包含相同的三列。

    写入 Cloud SQL 数据库的 Google 表格 表单提交 触发器函数看起来像以下未经测试代码:

    // Replace the variables in this block with real values.
    var address = 'database_IP_address';
    var user = 'user_name';
    var userPwd = 'user_password';
    var db = 'database_name';
    
    var dbUrl = 'jdbc:mysql://' + address + '/' + db;
    
    // Receive form response and replicate to a row in SQL table
    function handleFormSubmit( event ) {
      var conn = Jdbc.getConnection(dbUrl, user, userPwd);
    
      var stmt = conn.prepareStatement('INSERT INTO entries '
          + '(Timestamp, Name, Age) values (?, ?, ?)');
      stmt.setString(1, event.namedValues['Timestamp']);
      stmt.setString(2, event.namedValues['Name']);
      stmt.setString(3, event.namedValues['Age']);
      stmt.execute();
    }
    

    【讨论】:

    • @MehrozIrshad 注意 - 我在解决方案中有错字,已修复。 (还没有测试!)
    • 我会试一试。
    • @MehrozIrshad 你试过了吗?我想知道event 指的是什么?曾尝试过完全相同的事情,但是当我检查 event 未定义时...也收到此错误 TypeError: Cannot read property "namedValues" from undefined.
    • event 对象自动传递给从脚本触发器调用的函数。在这种情况下,设置一个触发器,从 on form submit 事件调用提供的函数。
    【解决方案2】:

    举一个我正在工作的解决方案的例子。我修改了 Mogsdad 的脚本以使用最新的参数和连接功能,并修复了语法错误。

    //Event is automatially passed on form submission when executed as a trigger. 
    //It contains objects that the user submitted
    function writeToCloudSQL(event) {
    //Note we get subname from the 'Instance Connection Name' of the Overview tab in the CloudSQL portal
    var subname = 'see image';
    var user = 'user';
    var userPwd = 'pwd';
    var db = 'db_name';
    
    var dbUrl = 'jdbc:google:mysql://' + subname + '/' + db;
    
    var conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);
    
    var stmt = conn.prepareStatement('INSERT INTO tbl_users (Timestamp, DL_ID, DOB, Last4SSN, HTMLGathered) values (NOW(), ?, ?, ?, \'No\');');
    stmt.setString(1, event.namedValues['DL_ID']);
    stmt.setString(2, event.namedValues['DOB']);
    stmt.setString(3, event.namedValues['Last4SSN']);
    
    stmt.execute();
    
    }
    

    定位子名称: Locating the subname

    在此处阅读有关 Event 参数的更多信息:

    https://developers.google.com/apps-script/guides/triggers/events

    在此处阅读有关连接字符串的更多信息:

    https://developers.google.com/apps-script/reference/jdbc/jdbc#getCloudSqlConnection(String,String,String)

    还要确保您已允许对 google 脚本进行网络访问

    https://developers.google.com/apps-script/guides/jdbc?hl=en#using_jdbcgetconnectionurl

    【讨论】:

      【解决方案3】:

      Zapier 及其 SQL Server 和 Google Sheets 集成可以做到这一点。我不隶属。 https://zapier.com/apps/sql-server/integrations

      【讨论】:

        【解决方案4】:

        如果您不想推出自己的解决方案,SeekWell 可让您自动将数据从 SQL 发送到表格,还可以将表格中的更改同步回数据库。 Apps Script 可以做到这一点,但我发现它有问题并且对我们的用例有限制,所以我构建了其他东西。有免费和付费计划。

        免责声明:这是我建造的。

        【讨论】:

          猜你喜欢
          • 2017-05-11
          • 2015-07-17
          • 1970-01-01
          • 2018-10-11
          • 2020-06-24
          • 2015-01-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多