Google 表单数据存储在云端 SQL 数据库

Google Form data to store in cloud SQL database

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

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

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

您有两次机会让表单提交触发器在您的云 SQL 数据库中复制表单响应;您可以从 Google Form Form submit event or the Google Sheets Form submit event.

触发

无论哪种方式,您都会有一个为每次表单提交调用的脚本,以及一个包含响应值的事件对象。您的触发器函数应该使用 JDBC 连接到数据库 - link 包含一个介绍,可以引导您完成要点。

例子

假设我们有一个表单询问两个问题,"Name" 和 "Age"。这将导致我们的电子表格中有 3 列; "Timestamp"每题加一。

为了与之匹配,我们有一个云 SQL 数据库设置了相同的三列。

A Google Sheets Form submit 写入云 SQL 数据库的触发器函数看起来像这样 未测试代码:

// 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();
}

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

免责声明:我构建了这个。

举一个我正在使用的解决方案的例子。我修改了 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

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

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

Zapier 及其 SQL 服务器和 Google 表格集成可以做到这一点。我没有隶属关系。 https://zapier.com/apps/sql-server/integrations