2

我正在做一个项目,我需要将获取的数据发布到 Google 表单并从电子表格中获取数据。我不能使用谷歌应用程序脚本,需要使用直接 POST 方法的方法,因为我将从 GSM 模块执行此功能。之前发布的所有解决方案都考虑了提供表单键的 Google 表单的旧结构。就像这个解决方案中描述的那样:

http://www.open-electronics.org/how-send-data-from-arduino-to-google-docs-spreadsheet/

我当前表格的链接是这个。

https://docs.google.com/forms/d/14MkYG3fPNezzUC_nXUsWHlZ5JhplvjyWTAeob7f_W7g/viewform

任何帮助,将不胜感激。

4

2 回答 2

10

是否要求谷歌表单位于此中间?如果能够将您的数据发布到电子表格就足够了,这里有一个 Google-Apps-Script 可以解决问题的一方面:一个简单的网络服务,它将接受表单数据作为查询字符串,并将其写入您的电子表格。

这个例子假设一个非常简单的电子表格,有三列,“Timestamp”、“col1”和“col2”。编辑代码以适合您的情况。

你可以在这里看到电子表格,甚至可以做一个测试帖

/**
 * doGet() function to add data to a spreadsheet.
 *
 * Spreadsheet data is provided as a querystring, e.g. ?col1=1&col2='pizza'
 *
 * From: http://stackoverflow.com/a/18725479/1677912
 *
 * @param {event} e Event passed to doGet, with querystring
 * @returns {String/html} Html to be served
 *
 * Test URLs (adjust ID as needed):
 *   https://script.google.com/macros/s/--DEV-SCRIPT-ID--/dev?col1=1&col2='pizza'
 *   https://script.google.com/macros/s/--PUB-SCRIPT-ID--/exec?col1=1&col2='pizza'
 */
function doGet(e) {  
  Logger.log( JSON.stringify(e) );  // view parameters

  var result = 'Ok'; // assume success

  if (e.parameter == undefined) {
    result = 'No Parameters';
  }
  else {
    var id = '--SHEET-ID---'; // Spreadsheet id for responses
    var sheet = SpreadsheetApp.openById(id).getActiveSheet();
    var newRow = sheet.getLastRow() + 1;
    var rowData = [];
    rowData[0] = new Date(); // Timestamp
    for (var param in e.parameter) {
      Logger.log('In for loop, param='+param);
      var value = stripQuotes(e.parameter[param]);
      //Logger.log(param + ':' + e.parameter[param]);
      switch (param) {
        case 'col1': 
          rowData[1] = value;
          break;
        case 'col2':
          rowData[2] = value;
          break;
        default:
          result = "unsupported parameter";
      }
    }
    Logger.log(JSON.stringify(rowData));

    // Write new row to spreadsheet
    var newRange = sheet.getRange(newRow, 1, 1, rowData.length);
    newRange.setValues([rowData]);
  }

  // Return result of operation
  return ContentService.createTextOutput(result);
}

/**
 * Remove leading and trailing single or double quotes
 */
function stripQuotes( value ) {
  return value.replace(/^["']|['"]$/g, "");
}
于 2013-09-10T17:38:08.403 回答
2

您可以使用新表格进行发送,它有一个菜单选项。(Responses->Get prefill url) 它提供了将数据发布到表单的 url。

您还问:“从电子表格中获取数据”:有两种方法,google apps script 和 gdata style "google-spreadsheet-api"。但我建议您混合使用 google 应用程序脚本和“arduino”样式代码,因为它具有比 gdata 样式 api 更好的文档和功能。

ps 不久前,我创建了一些用于创建“arduino”用户界面的公式。

于 2013-05-20T13:26:31.500 回答